Beispiel #1
0
        public AggregateUpdateResult DoPlayerAction(PlayerActions playerAction)
        {
            switch (playerAction)
            {
            case PlayerActions.MoveRight:
            case PlayerActions.MoveUp:
            case PlayerActions.MoveLeft:
            case PlayerActions.MoveDown:
                _snapshotManager.TakeTentativeSnapshot(this);

                bool requiresUpdate = false;
                foreach (var playerEntity in PlayerEntities)
                {
                    requiresUpdate |= playerEntity.HandlePlayerAction(this, playerAction);
                }

                if (requiresUpdate)
                {
                    _snapshotManager.AddPlayerActionHistory(playerAction);
                    Move++;
                    var updateResult = UpdateLevel();
                    return(updateResult);
                }

                return(new AggregateUpdateResult(AggregateUpdateResult.ResultTypes.Cancelled, 0, _updateResults));

            case PlayerActions.Undo:
                if (!_snapshotManager.CanUndo)
                {
                    return(new AggregateUpdateResult(AggregateUpdateResult.ResultTypes.Cancelled, 0, _updateResults));
                }
                _snapshotManager.AddPlayerActionHistory(playerAction);
                Undo();
                return(new AggregateUpdateResult(AggregateUpdateResult.ResultTypes.UndoPerformed, 0, _updateResults));

            case PlayerActions.None:
            default:
                return(new AggregateUpdateResult(AggregateUpdateResult.ResultTypes.Cancelled, 0, _updateResults));
            }
        }