Exemplo n.º 1
0
    /// <summary>
    /// Change the game state and modify all behavior in consequences
    /// </summary>
    /// <param name="p_newState">New game state</param>
    public void ChangeGameState(ENUM_GAMESTATE p_newState)
    {
        _gameState = p_newState;

        switch (_gameState)
        {
        case ENUM_GAMESTATE.LOADINGLEVEL:
            if (_isSkipingLoading)
            {
                Destroy(GameObject.FindGameObjectWithTag(Tags._loadingScreen));
                ChangeGameState(ENUM_GAMESTATE.LOADING);
            }
            else
            {
                StartCoroutine(LoadingBar());
            }
            break;

        case ENUM_GAMESTATE.LOADING:
            _timeBeforeEndOfTheRound = _SecondsForGame;
            LoadSpawnPosition();
            LoadPlayers();
            SetAllPlayersMovementAllowance(false);
            ChangeGameState(ENUM_GAMESTATE.GOALSCREEN);
            break;

        case ENUM_GAMESTATE.GOALSCREEN:
            _goalScreen.SetActive(true);
            _goalScreen.GetComponent <WaitForInteraction> ().enabled = true;
            break;

        case ENUM_GAMESTATE.CINEMATICS:
            _goalScreen.SetActive(false);
            int indexSick = 0;

            for (int i = 0; i < _players.Length; ++i)
            {
                if (GetPlayer(i)._isContamined)
                {
                    indexSick = i;
                    break;
                }
            }

            SetCamera(indexSick);
            _game.LaunchCinematic(GameObject.FindGameObjectWithTag(Tags.m_mainCamera), _cameraForScoring.transform.position, _cameraForScoring.transform.eulerAngles);
            break;

        case ENUM_GAMESTATE.COUNTDOWN:
            Debug.LogError("Do countdown behaviour");
            SetScoreImage();
            ChangeGameState(ENUM_GAMESTATE.PLAYING);
            break;

        case ENUM_GAMESTATE.PLAYING:
            _ScoringRecap.SetActive(true);
            SetAllPlayersMovementAllowance(true);
            break;

        case ENUM_GAMESTATE.END:
            SetAllPlayersMovementAllowance(false);
            SetWinnerAndScore();
            SetCameraForWinner();
            ChangeGameState(ENUM_GAMESTATE.SCORING);
            break;

        case ENUM_GAMESTATE.SCORING:
            _ScoringRecap.SetActive(false);
            StartCoroutine(FadeInScorePanel());
            break;

        case ENUM_GAMESTATE.RESET:

            SceneManager.LoadScene("Level 1");

            break;

            /*
             * _finalScorePanel.SetActive (false);
             * _cameraForScoring.transform.SetParent (null);
             *
             * foreach (Text score in _playerScore) {
             *      score.text = "0000";
             * }
             *
             * foreach (GameObject player in _players) {
             *      Destroy (player);
             * }
             * ChangeGameState(ENUM_GAMESTATE.LOADING);
             * break;
             *
             * default:
             * Debug.Log("/ ! \\ No game state defined for the value: " + _gameState.ToString());
             * break;
             */
        }
    }