Esempio n. 1
0
        private TGameState Construct <TGameState>() where TGameState : class, IGameState
        {
            TGameState state = null;

            foreach (var constructor in (typeof(TGameState).GetConstructors()))
            {
                bool     canConstruct     = true;
                object[] passedParameters = new object[0];
                var      objparams        = constructor.GetParameters();

                passedParameters = new object[objparams.Length];

                for (var index = 0; index < objparams.Length; index++)
                {
                    var param = objparams[index];
                    if (param.ParameterType == typeof(GuiPanoramaSkyBox))
                    {
                        passedParameters[index] = _skyBox;
                    }
                    else
                    {
                        canConstruct = false;
                        break;
                    }
                }

                if (canConstruct)
                {
                    state = (TGameState)constructor.Invoke(passedParameters);
                    break;
                }
            }

            return(state);
        }
Esempio n. 2
0
        public TGameState RegisterState <TGameState>() where TGameState : GameWorldState, new()
        {
            var type = typeof(TGameState);

            if (_states.ContainsKey(type))
            {
                throw new InvalidOperationException("State already registered.");
            }

            var state = new TGameState {
                _game = this
            };

            _states.Add(type, state);

            return(state);
        }
Esempio n. 3
0
    public void ChangeGameState(TGameState l_newGameState)
    {
        m_ElapsedTime = 0;
        switch (l_newGameState)
        {
        case TGameState.Play:
            StartCoroutine(SetJumpToTrue());
            if (m_CurrentGameState == TGameState.Upgrade)
            {
                SoundController.Instance.PlayAudioSource();
                // Changes game mode randomly
                GameModeController.Instance.ChangeGameModeStateRandomly();
                m_PlayerBlackboard.AddHealth(m_PlayerBlackboard.m_MaxHealth);
                // Set player position
                m_PlayerBlackboard.RestartPlayerPosition();
                // Start round
                RoundController.Instance.StartRound();
            }
            Time.timeScale = 1;
            break;

        case TGameState.Upgrade:
            RoundController.Instance.DestroyEnemiesAlive();
            // Set time Scale to 0
            Time.timeScale = 0;
            break;

        case TGameState.Pause:
            m_PlayerBlackboard.m_CanJump = false;
            // Set time Scale to 0
            Time.timeScale = 0;
            break;

        case TGameState.GameOver:
            RoundController.Instance.DestroyEnemiesAlive();
            // Set time Scale to 1
            Time.timeScale = 1;
            break;
        }
        // Set current state to new state
        m_CurrentGameState = l_newGameState;
        // Restart game elements
        RestartGameElements();
        // Active game elements depending on game state
        ActiveGameStateElements();
        switch (m_CurrentGameState)
        {
        case TGameState.Upgrade:
            // Select upgraade button
            HUDController.Instance.SelectUpgradeButton();
            //Upgrade HUD
            HUDController.Instance.UpdateUpgradeHUDCost();
            HUDController.Instance.DesactiveObjectiveImagesFalse();
            UpdateBuyButtons();
            break;

        case TGameState.Pause:
            HUDController.Instance.SelectPauseButton();
            Debug.Log(HUDController.Instance.m_EventSystem.currentSelectedGameObject.name);
            break;

        case TGameState.GameOver:
            HUDController.Instance.SelectGameOverButton();
            break;
        }
    }