local Base = require("Battle/Logic/AI/Decision/Decision_Base") local Decision_RetinueFollow = class("Decision_RetinueFollow", Base) local RetinueSystem = require"Battle/Logic/Entity/System/RetinueSystem" --[[ 初始化 --]] function Decision_RetinueFollow:initialize(entity) --类型 self.Type = LuaConst.DecisionType.RetinueFollow --瞬时 self.IsOnce = false end function Decision_RetinueFollow:CanEnter(entity, decisionData) if entity:GetMasterEntity() then return not RetinueSystem.IsInRetinueExpectedArea(entity) end return false end --[[ 进入该Decision --]] function Decision_RetinueFollow:DecisionIn(entity, decisionData) entity.components.target:SetFollowTarget(entity:GetMasterEntity()) self:FindRetinuePath(entity, decisionData) end function Decision_RetinueFollow:FindRetinuePath(entity, decisionData, decisionRecordDic) decisionRecordDic = decisionRecordDic or entity.components.aiBase:GetDecisionRecordDic(decisionData) if decisionRecordDic then decisionRecordDic.nextFindPathFrame = LogicUpdateManager._clientHandleFrame + decisionData.IntParam1 end local expectedPos, isBornAreaPos = RetinueSystem.GetRetinueExpectedPos(entity) if expectedPos then if isBornAreaPos then SystemManager.OnConvey(entity, expectedPos, expectedPos - entity:GetLogicPos(), true) else SystemManager.FindPath(entity, expectedPos, true) end end end function Decision_RetinueFollow:DecisionOut(entity, decisionData) end --[[ 能否退出 退出条件:移动到固定目标点 --]] function Decision_RetinueFollow:CanExit(entity, decisionData, command) return RetinueSystem.IsInRetinueExpectedArea(entity) end --[[ 输出指令 --]] function Decision_RetinueFollow:SetCommand(entity, decisionData, command) local decisionRecordDic = entity.components.aiBase:GetDecisionRecordDic(decisionData) if decisionRecordDic then if LogicUpdateManager._clientHandleFrame > decisionRecordDic.nextFindPathFrame then self:FindRetinuePath(entity, decisionData, decisionRecordDic) end end return self:RunToPathPoint(entity, command,decisionData) end return Decision_RetinueFollow