local Base = require("Battle/Logic/AI/Decision/Decision_Base") local Decision_PriorChangeTarget = class("Decision_PriorChangeTarget", Base) --[[ 初始化 --]] function Decision_PriorChangeTarget:initialize(entity) --类型 self.Type = LuaConst.DecisionType.PriorChangeTarget --瞬时 self.IsOnce = true end --[[ 输出指令 --]] function Decision_PriorChangeTarget:SetCommand(entity, decisionData, command) command.DecisionID = decisionData.ID return command end local EEntityType = { HERO = -1, MONSTER_TYPE_START = 0, } --[[ 执行 --]] function Decision_PriorChangeTarget:Handle(entity, decisionData, stateType, animName) --entity.components.aiBase:SetEntityRecord(decisionData.ID, decisionEntityRecord) local PriorityGetter = entity.components.aiBase:GetEntityRecord(decisionData.ID) if not PriorityGetter then local priorEntityType = decisionData.IntParam1 PriorityGetter = function(_entity) local priority = nil if priorEntityType == EEntityType.HERO then if _entity:IsHero() then priority = LuaConst.MaxTargetPriority end elseif priorEntityType > EEntityType.MONSTER_TYPE_START then if _entity:GetCharacterType() == priorEntityType then priority = LuaConst.MaxTargetPriority end end --支持返回nil,如果返回nil,则接口底层会用TargetSystem.GetEntityTargetPriority再查询一次 return priority end entity.components.aiBase:SetEntityRecord(decisionData.ID, PriorityGetter) end SystemManager.OnSearchTarget(entity, 1, entity.components.base.CurCharacterData.WarnRange, 1, 0, false, false, true, PriorityGetter) return LuaConst.StateType.None,nil end return Decision_PriorChangeTarget