public void SetState(GameState state) { switch (state) { case GameState.MainMenu: SceneManager.LoadScene("MainMenu", LoadSceneMode.Single); CamPan.DisableCamPan(); transform.position = Vector3.zero; transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0); ObjectPlacement.DisableObjectPlacement(); ObjectPlacement.ClearPlacedObjects(); IngameUI.ActivateElements(false, false, false, false); IngameUI.ClearList(); MusicSource.clip = PlayMusic; MusicSource.Play(); Time.timeScale = 1; break; case GameState.PlacingObjects: if (_currentState == GameState.Playing) { foreach (var barb in GameObject.FindObjectsOfType <Barbie>()) { Destroy(barb.gameObject); } ObjectPlacement.RestorePlacedObjectState(); var currentActiveLevelScene = SceneManager.GetSceneByName(Levels[_currentLevelIndex].SceneName); SceneManager.LoadScene(Levels[_currentLevelIndex].SceneName, LoadSceneMode.Additive); ExecutionDelayer.Instance.ExecuteNextFrame(() => { SceneManager.UnloadScene(currentActiveLevelScene); SceneManager.SetActiveScene(SceneManager.GetSceneByName("DynamicObjects")); }); } ObjectPlacement.EnableObjectPlacement(); CamPan.EnableCamPan(); IngameUI.ActivateElements(true, true, false, false); MusicSource.clip = PlacementMusic; MusicSource.Play(); Time.timeScale = 0; break; case GameState.Playing: if (_currentState == GameState.PlacingObjects) { ObjectPlacement.SavePlacedObjectState(); } ObjectPlacement.DisableObjectPlacement(); CamPan.EnableCamPan(); IngameUI.ActivateElements(false, true, false, false); MusicSource.clip = PlayMusic; MusicSource.Play(); Time.timeScale = 1; break; case GameState.SuccessfulEnd: Time.timeScale = 0; if (_currentLevelIndex < Levels.Length - 1) { IngameUI.ActivateElements(false, false, true, false); } else { IngameUI.ActivateElements(false, false, false, true); } break; } _currentState = state; }