using BehaviorDesigner.Runtime.Tasks; using Gameplay.BT.Variables; using Gameplay.Unit; using Gameplay.AI; using Framework; public class BTDefendMoveTo : Action { public SharedBattleInfo sharedBattleInfo; private GameUnit _owner; private GameUnit _target; private uint _lastTarget; public override void OnStart() { _owner = GameUnitManager.instance.infightUnits.Search(sharedBattleInfo.Value.ownerId); } public override TaskStatus OnUpdate() { if (sharedBattleInfo.Value.theChosenOneId != Constants.INVALID_UINT_ID) { // 超出守卫范围 if (_owner.statusData.isMoveing && AIUtils.CheckDistanceIsOver(_owner)) { sharedBattleInfo.Value.theChosenOneId = Constants.INVALID_UINT_ID; } if (_lastTarget != sharedBattleInfo.Value.theChosenOneId && !AIUtils.IsNeedStop(_owner) && _owner.controlData.targetEnemy == null) { _lastTarget = sharedBattleInfo.Value.theChosenOneId; if (GameUnitManager.instance.infightUnits.Contains(sharedBattleInfo.Value.theChosenOneId)) { var target = GameUnitManager.instance.infightUnits.Search(sharedBattleInfo.Value.theChosenOneId); if (target != null) { AIUtils.CheckAndMove(_owner, target.transData.cellIndex); } } } if (_owner.controlData.targetEnemy == null) { _lastTarget = Constants.INVALID_UINT_ID; } return TaskStatus.Running; } return TaskStatus.Failure; } public override void OnEnd() { } }