public void Undo() { if (commands.Count == 0) { return; } // Undo all commands of same type Type undoType = commands.Peek().GetType(); while (commands.Count > 0 && commands.Peek().GetType() == undoType) { ITankCommand undoCommand = commands.Pop(); undoCommand.Undo(); } Console.WriteLine("COMMAND PlayerTank: Undo()"); // Change back to initial phase if (commands.Count > 0) { if (commands.Peek().GetType() == typeof(TankMoveCommand)) { SetPhase(new TankMovement(this)); } } else { SetPhase(new TankMovement(this)); } }
public void Register(ITankCommand command) { if (command == null) { throw new ArgumentNullException("command"); } ITankCommand existedCommand; if (_commands.TryGetValue(command.Guid, out existedCommand)) { log.WarnFormat("a tank command with Guid '{0}' (Name='{1}') is already existed. it will be replaced by command with Guid '{2}' (Name='{3}')", existedCommand.Guid, existedCommand.Name, command.Guid, command.Name); } _commands[command.Guid] = command; }
public void AddCommand(ITankCommand command) { commands.Push(command); }