void Initialize() { // Prevents duplicate GameManagers, but allows for easier testing if (Instance != FindObjectOfType<GameManager>()) { gameObject.SetActive(false); return; } // Don't destroy this; other GameManagers in other scenes should be disabled before build and for testing should use GameStateInit DontDestroyOnLoad(this); // Create new inventory if (m_inventory == null) { m_inventory = new Inventory(slots); } /////////////////////// // Create new CharacterManager if (m_characters == null) { // No auto; let game states search by their own m_characters = new CharacterManager(false); } /////////////////////// // Create new CameraController if (m_camera == null) { // Add targets after scene load m_camera = new CameraController(/*Human.Link.gameObject, Dog.Link.gameObject*/); // Add states, but change on GameStatePlay m_camera.AddState(new CameraStateFollow(movementSmooth, rotationSmooth, minY, maxY)); //Camera.ChangeState("CameraStateFollow"); } /////////////////////// // Create a new UI Manager if (m_ui == null) { //BUG: this seems to be null'd after first scene load? m_ui = new UIManager(false); } /////////////////////// // Create new GameStateMachine if (GameState == null) { GameState = new GameStateMachine(); // Add some states GameState.AddStatesRange(new GameStatePlay(), new GameStateStart(), new GameStateEnd(), new GameStateLoad(), new GameStateInit()); GameState.ChangeState(startState); // Set starting statea GameState.UpdateState(); // Update to that state immidiately } /////////////////////// // Refresh GameManager once after all systems are initialized Refresh(); }