protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; if (!unit) { return; } WorldObject chaseTarget = controller.chaseTarget; if (chaseTarget && !unit.holdingPosition && !WorkManager.ObjectCanReachTarget(unit, chaseTarget)) { var newDestination = WorkManager.FindDistinationPointByTarget(chaseTarget, unit); if (newDestination.HasValue) { unit.StartMove(newDestination.Value); } } else { unit.StopMove(); } }
protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; WorldObject chaseTarget = controller.chaseTarget; if (chaseTarget && !WorkManager.ObjectCanReachTargetWithAbility(unit, controller.abilityToUse, chaseTarget)) { var newDestination = WorkManager.FindDistinationPointByTarget(chaseTarget, unit); if (newDestination.HasValue) { unit.StartMove(newDestination.Value); } } else { controller.unit.StopMove(); } }
protected override void DoAction(UnitStateController controller) { Unit unit = controller.unit; var chaseTarget = AttackUtil.SetClosestEnemyAsTarget(controller); if (chaseTarget && !unit.holdingPosition && !WorkManager.ObjectCanReachTarget(unit, chaseTarget)) { var newDestination = WorkManager.FindDistinationPointByTarget(controller.chaseTarget, unit); if (newDestination.HasValue) { unit.StartMove(newDestination.Value); } } else { controller.unit.StopMove(); } }