示例#1
0
        private void TryToMove(Position targetPosition)
        {
            if (targetPosition != null)
            {
                status    = Status.Moving;
                direction = CalculateDirection(targetPosition - position);
                engine.ScheduleUpdate(GetMoveCooldown(position, targetPosition), this);

                var blockingUnit = engine.GetUnitAt(targetPosition);
                if (blockingUnit != null)
                {
                    engine.SwapUnits(this, blockingUnit);
                }
                else
                {
                    engine.MoveUnit(this, targetPosition);
                }
            }
            else
            {
                status = Status.Idle;
                // Retry after moveRetryCooldown ticks
                engine.ScheduleUpdate(moveRetryCooldown, this);
            }
        }