public IEnumerator InitializeGameEnvironment() { if (mInitializing || mInitialized) { yield break; } mInitializing = true; //create the startup scene mStartupScenePrefab = GameObject.Instantiate(StartupScenePrefab) as GameObject; //wait a tick double start = Frontiers.WorldClock.RealTime; while (Frontiers.WorldClock.RealTime < start + 0.01f) { yield return(null); } //TODO move these into globals, use strings for types //to let modders add their own manager classes on startup //base yield return(StartCoroutine(Manager.WakeUpAndInitialize <SteamManager>("Initializing Steam Manager"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Mods>("Initializing MODS"))); //interface, input, GUI yield return(StartCoroutine(Manager.WakeUpAndInitialize <UserActionManager>("Initializing user action manager"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <InterfaceActionManager>("Initializing interface action manager"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <GUIManager>("Initializing GUI manager"))); //display & sound yield return(StartCoroutine(Manager.WakeUpAndInitialize <CameraFX>("Initializing Camera FX"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <AudioManager>("Initializing audio manager"))); //gameplay data yield return(StartCoroutine(Manager.WakeUpAndInitialize <Biomes>("Initializing Biomes"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Meteors>("Initializing Meteors"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Mats>("Frontiers_ArtResourceManagers"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Meshes>("Frontiers_ArtResourceManagers"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Creatures>("Initializing Creatures"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Critters>("Initializing Critters"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Characters>("Initializing Characters"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <WorldItems>("Initializing WorldItems"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <WIGroups>("Initializing WIGroups"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Structures>("Initializing Structures"))); //gameplay objects yield return(StartCoroutine(Manager.WakeUpAndInitialize <Conversations>("Initializing Conversations"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Missions>("Initializing Missions"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Books>("Initializing Books"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Museums>("Initializing Museums"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Skills>("Initializing Skills"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Potions>("Initializing Potions"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Plants>("Initializing Plants"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Conditions>("Initializing Status Conditions"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Blueprints>("Initializing Blueprints"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <PreparedFoods>("Initializing Foods"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Moneylenders>("Initializing Moneylenders"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Paths>("Initializing Paths"))); //world and player yield return(StartCoroutine(Manager.WakeUpAndInitialize <GameWorld>("Initializing Game World"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Ocean>("Initializing Ocean"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <LightManager>("Initializing Lights"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <DarkrotManager>("Initializing Darkrot"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <SpawnManager>("Initializing Spawn Manager"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <VRManager>("Initializing VR Manager"))); yield return(StartCoroutine(Manager.WakeUpAndInitialize <Player>("Initializing Player"))); Manager.FinishedInitializing(); //load all data from disk //wait a tick yield return(null); Biomes.Get.UseTimeOfDayOverride = true; Biomes.Get.HourOfDayOverride = UnityEngine.Random.Range(0f, 24f); mInitializing = false; mInitialized = true; //pause after initializing //do this now while the player won't notice a hitch System.GC.Collect(); Resources.UnloadUnusedAssets(); }