local Base = require("Battle/Logic/AI/Decision/Decision_Base") local Decision_KeepDistance = class("Decision_KeepDistance", Base) --[[ 初始化 --]] function Decision_KeepDistance:initialize(entity) --类型 self.Type = LuaConst.DecisionType.KeepDistance --瞬时 self.IsOnce = false end --[[ 能否退出 退出条件:在范围内 --]] function Decision_KeepDistance:CanExit(entity, decisionData, command) local disMax = decisionData.IntParam1 + LuaConst.DisLimit local disMin = decisionData.IntParam1 - LuaConst.DisLimit local targetComponent = entity.components.target if targetComponent.Target then return targetComponent.ToTargetDisSqr <= disMax * disMax and targetComponent.ToTargetDisSqr >= disMin * disMin else return false end end --[[ 输出指令 --]] function Decision_KeepDistance:SetCommand(entity, decisionData, command) local targetComponent = entity.components.target local target = targetComponent.Target if target then local disMax = decisionData.IntParam1 + LuaConst.DisLimit local disMin = decisionData.IntParam1 - LuaConst.DisLimit if targetComponent.ToTargetDisSqr > disMax * disMax or targetComponent.ToTargetDisSqr < disMin * disMin then local selfPos = entity.components.move.LogicPos local targetPos = target.components.move.LogicPos local dir = selfPos - targetPos local pos = targetPos + FP.V2.Normalized(dir) * decisionData.IntParam1 command.MoveDir = pos - selfPos command.RotateDir:Reset(command.MoveDir) end end return command end return Decision_KeepDistance