private void StateMachineUpdate() { switch (_gameState) { case EGameState.MENU: { _colorSchemeManager.RandomizeColorSceme(); _backgroundGradient.SetColor(_colorSchemeManager.GetBGColors()); _startCubeRenderer.material = _colorSchemeManager.GetCubeMaterial(0f); _cubeManager.OnScoreUpdate = null; _uiController.UpdateScoreText(_highScore); _cubeManager.HandleMenuState(); _cameraController.MoveCameraByBlockHeight(0f); _cameraController.ZoomInCamera(); _onClick = () => ChangeState(EGameState.PLAY); _cubeManager.OnYUpdate = null; _cubeManager.OnFail = null; break; } case EGameState.PLAY: { _score = 0; _uiController.UpdateScoreText(_score); _cameraController.ZoomInCamera(); _cubeManager.HandleNewGame(); _cubeManager.OnScoreUpdate = AddScore; _onClick = _cubeManager.HandleClick; _cubeManager.OnYUpdate = _cameraController.MoveCameraByBlockHeight; _cubeManager.OnFail = () => ChangeState(EGameState.LOSE); break; } case EGameState.LOSE: { UpdateHighScore(); _cubeManager.OnScoreUpdate = null; _cameraController.ZoomOutCamera(_cubeManager.LastCubeYPos); _onClick = () => ChangeState(EGameState.MENU); _cubeManager.OnYUpdate = null; _cubeManager.OnFail = null; break; } } }