Beispiel #1
0
        public void Move(
            Tile.Direction direction,
            Player movingPlayer,
            Player destinationTilePlayer,
            MoveDetails moveDetails
            )
        {
            Tile currentTile = GetTile(movingPlayer);
            Wall wall        = currentTile.GetWall(direction);

            if (wall == null)
            {
                moveDetails.Status = MoveDetails.MoveStatus.ABORTED;
            }
            else
            {
                wall.GoThrough(
                    movingPlayer, destinationTilePlayer, moveDetails
                    );
                if (moveDetails.Status != MoveDetails.MoveStatus.FAILURE)
                {
                    movingPlayer.Pos.Move(direction);
                }
            }
        }
Beispiel #2
0
 public static List<SoundFX> GetNextPlayerSounds(MoveDetails moveDetails, Game game)
 {
     if (game.GameOver())
     {
         return new List<SoundFX> { SoundFX.DEFEAT };
     }
     else
     {
         if (moveDetails.PlayAgain)
         {
             return new List<SoundFX> { SoundFX.PLAY_AGAIN };
         }
         else
         {
             return GetWelcomeSounds(game.CurrentPlayer());
         }
     }
 }
Beispiel #3
0
 public static List<SoundFX> GetMoveSounds(MoveDetails moveDetails)
 {
     if (moveDetails.Status == MoveDetails.MoveStatus.ABORTED)
     {
         return new List<SoundFX> {
             SoundFX.BORDER
         };
     }
     else
     {
         // First insert the purely move-related sounds
         return new List<SoundFX>
         {
             GetWallSound(moveDetails.WallType),
             moveDetails.Status == MoveDetails.MoveStatus.FAILURE ?
                        SoundFX.THOU_SHALT_NOT_PASS :
                        SoundFX.THOU_SHALT_PASS
         };
     }
 }
Beispiel #4
0
        public void Update()
        {
            switch (m_stateMachine.CurrentState)
            {
            case GameManagerStateMachine.State.WAIT_FOR_INPUT:
                Tile.Direction input = m_gameInput.GetNewInput();
                if (input != Tile.Direction.NONE)
                {
                    Debug.Log("Input detected : " + input);
                    MoveDetails moveDetails             = m_game.Move(input);
                    List <SoundMixer.SoundFX> allSounds =
                        SoundMixer.GetMoveSounds(moveDetails);
                    if (moveDetails.Status != MoveDetails.MoveStatus.ABORTED)
                    {
                        allSounds.AddRange(SoundMixer.GetNextPlayerSounds(
                                               moveDetails, m_game
                                               ));
                    }
                    m_soundManager.PlayAllSounds(allSounds);
                    m_stateMachine.MoveNext(
                        GameManagerStateMachine.Event.INPUT_RECEIVED
                        );
                }
                break;

            case GameManagerStateMachine.State.PLAYING_SOUNDS:
                if (m_soundManager.Done())
                {
                    m_stateMachine.MoveNext(
                        GameManagerStateMachine.Event.SOUND_FINISHED
                        );
                }
                break;

            default:
                Debug.LogError("Unknown state: " + m_stateMachine.CurrentState);
                break;
            }
        }
Beispiel #5
0
        public virtual void GoThrough(Player player, Player destinationTilePlayer, MoveDetails moveDetails)
        {
            MoveDetails.MoveStatus successStatus = m_traversed ?
                                                   MoveDetails.MoveStatus.SUCCESS_KNOWN :
                                                   MoveDetails.MoveStatus.SUCCESS_NEW;

            moveDetails.WallType = WallType;
            switch (WallType)
            {
            case Wall.Type.OPEN:
                moveDetails.Status = successStatus;
                break;

            case Wall.Type.CLOSED:
                moveDetails.Status = MoveDetails.MoveStatus.FAILURE;
                break;

            case Wall.Type.MOUSE_HOLE:
                moveDetails.Status = (player.AnimalType == Player.Animal.MOUSE) ?
                                     successStatus :
                                     MoveDetails.MoveStatus.FAILURE;
                break;

            case Wall.Type.RABBIT_HOLE:
                moveDetails.Status = (player.AnimalType == Player.Animal.RABBIT) ?
                                     successStatus :
                                     MoveDetails.MoveStatus.FAILURE;
                break;

            case Wall.Type.MAGIC_DOOR:
                moveDetails.Status = m_traversed || (destinationTilePlayer != null) ?
                                     successStatus :
                                     MoveDetails.MoveStatus.FAILURE;
                break;
            }

            m_traversed = moveDetails.Status != MoveDetails.MoveStatus.FAILURE;
        }
Beispiel #6
0
        public MoveDetails Move(Tile.Direction direction)
        {
            Player      currentPlayer = m_players[m_currentPlayerIndex];
            MoveDetails moveDetails   = new MoveDetails(currentPlayer);

            m_board.Move(
                direction,
                currentPlayer,
                m_players.Find(x => x.Pos == currentPlayer.Pos.OffsetPosition(direction)),
                moveDetails
                );

            if (moveDetails.Status == MoveDetails.MoveStatus.SUCCESS_KNOWN && !m_currentPlayerAlreadyMoved)
            {
                // let the same player play again
                m_currentPlayerAlreadyMoved = true;
                moveDetails.PlayAgain       = true;
            }
            else if (moveDetails.Status != MoveDetails.MoveStatus.ABORTED)
            {
                NextPlayer();
            }
            return(moveDetails);
        }