--代表1个或多个aiid的ai配置 --注意AiObject支持合并多个ai配置 local AiObject = class("AiObject") local PriorityDecisionGroup = require "Battle/Logic/Entity/Component/AI/PriorityDecisionGroup" local table=table local ipairs=ipairs function AiObject:initialize(aiid) self.aiid = aiid self.PriorityDecisionGroupList = {} self.PriorityDecisionGroupCount = 0 --是否是合并AI,是否合并了多个aiid对应的ai配置数据 self.isCombined = false self.combinedAiids = {} self.aiRecordDic = {} --简单的计时器,只会存开始时间戳 self.timerDic = {} end --堆叠AI,可以组合多个aiid的ai配置 function AiObject:AppendAIData(data) if self.aiid == nil then self.aiid = data.ID end if #self.PriorityDecisionGroupList > 0 then self.isCombined = true table.insert(self.combinedAiids,data.ID) end for index,value in ipairs(data.decisionGroupDataList) do local priorityEntity = PriorityDecisionGroup:new(value) table.insert(self.PriorityDecisionGroupList, priorityEntity) end self.PriorityDecisionGroupCount = #self.PriorityDecisionGroupList end --整个ai内共享的临时数据存放点,可以跨Decision共享 function AiObject:SetAiRecord(key,value) self.aiRecordDic[key] = value end function AiObject:GetAiRecord(key) return self.aiRecordDic[key] end local EStartTimerMode = { --RESET = 0、1, DONT_RESET = 2, } function AiObject:StartTimer(key,mode) local timer = self.timerDic[key] if timer == nil then self.timerDic[key] = {} timer = self.timerDic[key] end if timer.startTime == nil or mode ~= EStartTimerMode.DONT_RESET then timer.startTime = LogicUpdateManager._clientHandleFrame end end function AiObject:StopTimer(key) self.timerDic[key] = nil end function AiObject:GetTimerElapsed(key) local ela = 0 local timer = self.timerDic[key] if timer then ela = LogicUpdateManager._clientHandleFrame - timer.startTime end return ela end function AiObject:HasTimer(key) return self.timerDic[key] ~= nil end function AiObject:Clear() if self.PriorityDecisionGroupList then for i,decisionGroup in ipairs(self.PriorityDecisionGroupList) do decisionGroup.EnterCount = 0 end end self:ClearRecord() self:ClearTimer() end function AiObject:ClearTimer() self.timerDic = {} end function AiObject:ClearRecord() self.aiRecordDic = {} end return AiObject