local Base = require("Battle/Logic/AI/Decision/Decision_Base") local Decision_ChangeFollowTarget = class("Decision_ChangeFollowTarget", Base) --[[ 初始化 --]] function Decision_ChangeFollowTarget:initialize(entity) --类型 self.Type = LuaConst.DecisionType.ChangeFollowTarget --瞬时 self.IsOnce = true self.searchParamDic = {} -- key :decisionID ,val: searchParam 类似对象池 end --[[ 输出指令 --]] function Decision_ChangeFollowTarget:SetCommand(entity, decisionData, command) command.DecisionID = decisionData.ID return command end --[[ 执行 --]] function Decision_ChangeFollowTarget:Handle(entity, decisionData, stateType, animName) local disSqr = nil local conditionStr = nil local splits = string.split(decisionData.StringParam1,"|") for i,split in ipairs(splits) do if split == "WarnRange" then disSqr = entity.components.base.CurCharacterData.WarnRange else if not string.isNilOrEmpty(split) then conditionStr = split end end end if not disSqr then disSqr = FP.newV1(decisionData.IntParam1) end if conditionStr then local searchParam = self.searchParamDic[decisionData.ID] if searchParam == nil then local sortType = decisionData.IntParam3 if decisionData.IntParam3 == 4 then sortType = LuaConst.ETargetSortType.RANDOM elseif decisionData.IntParam3 == 5 then sortType = LuaConst.ETargetSortType.DIST_NEAR logging.error(LTAG.ERROR, "[策划] :AI的查询设置目标,目前未实现找npc ,AI-id = ", decisionData.ID) end searchParam = { campType = decisionData.IntParam2, conditionStr = conditionStr, regionParams = { shapeType = LuaConst.ERegionShapeType.CIRCLE, shapeNumParams = {FP.Math.Sqrt(disSqr)}, }, sortParams = {sortType = sortType}, monsterTypes = {decisionData.IntParam4}, } self.searchParamDic[decisionData.ID] = searchParam end local target = TargetManager.GetTarget(entity, searchParam) SystemManager.SetFollowTarget(entity, target) else SystemManager.OnSearchFollowTarget(entity, decisionData.IntParam2, disSqr, decisionData.IntParam3, decisionData.IntParam4) end return LuaConst.StateType.None,nil end return Decision_ChangeFollowTarget