Example #1
0
        public override CommandResult ExecuteCommand(PositionState positionState, Tracker tracker)
        {
            if (!TryToConsumeBattery(positionState))
            {
                return(new CommandResult(false, true));
            }

            var previousCoordinateX = positionState.X;
            var previousCoordinateY = positionState.Y;

            var facing = positionState.Facing;

            if (facing == Facing.N)
            {
                positionState.Y += StepCount;
            }
            if (facing == Facing.E)
            {
                positionState.X -= StepCount;
            }
            if (facing == Facing.S)
            {
                positionState.Y -= StepCount;
            }
            if (facing == Facing.W)
            {
                positionState.X += StepCount;
            }

            if (positionState.XCoordinateInBorder() && positionState.YCoordinateInBorder())
            {
                if (positionState.PlaceIsAvailable())
                {
                    tracker.TryAddingToVisited(positionState.X, positionState.Y);
                    return(new CommandResult(true));
                }
            }

            positionState.X = previousCoordinateX;
            positionState.Y = previousCoordinateY;

            return(new CommandResult(false));
        }