예제 #1
0
        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;
        }
예제 #3
0
 public void AddCommand(ITankCommand command)
 {
     commands.Push(command);
 }