private void AttackOrder(Order order) { // Check for goal reached if (order.targetUnit.status == Status.Dead) { NextOrder(); Update(); return; } var targetPosition = order.targetUnit.position; if (position.Distance(targetPosition) > type.attackRange) { // Move into range MoveTowards(targetPosition); return; } status = Status.Attacking; engine.Attack(this, order.targetUnit); direction = CalculateDirection(targetPosition - position); engine.ScheduleUpdate(GetAttackCooldown(), this); }