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); }
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); }
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; } }