void OnLevelWasLoaded(int level) { GameScenes scene = (GameScenes)level; KSPAddonImproved.Startup mask = 0; if (scene == GameScenes.LOADINGBUFFER) { return; } Debug.Log(string.Format("{1}: {0} was loaded; instantiating addons...", scene.ToString(), _identifier)); // Convert GameScenes => SceneMask switch (scene) { case GameScenes.EDITOR: mask = KSPAddonImproved.Startup.EditorVAB | KSPAddonImproved.Startup.EditorSPH; break; case GameScenes.CREDITS: mask = KSPAddonImproved.Startup.Credits; break; case GameScenes.FLIGHT: mask = KSPAddonImproved.Startup.Flight; break; case GameScenes.LOADING: mask = KSPAddonImproved.Startup.Instantly; break; case GameScenes.MAINMENU: mask = KSPAddonImproved.Startup.MainMenu; break; case GameScenes.SETTINGS: mask = KSPAddonImproved.Startup.Settings; break; case GameScenes.SPACECENTER: mask = KSPAddonImproved.Startup.SpaceCenter; break; case GameScenes.TRACKSTATION: mask = KSPAddonImproved.Startup.TrackingStation; break; case GameScenes.PSYSTEM: mask = KSPAddonImproved.Startup.PSystemSpawn; break; case GameScenes.LOADINGBUFFER: // intentionally left unset break; default: Debug.LogError(string.Format("{1} unrecognized scene: {0}", scene.ToString(), _identifier)); break; } int counter = 0; for (int i = 0; i < addons.Count; ++i) { var addon = addons[i]; if (addon.created && addon.RunOnce) { continue; // this addon was already loaded } // should this addon be initialized in current scene? if ((addon.Scenes & mask) != 0) { Debug.Log(string.Format("ImprovedAddonLoader: Creating addon '{0}'", addon.type.Name)); GameObject go = new GameObject(addon.type.Name); go.AddComponent(addon.type); addon.created = true; ++counter; } } Debug.Log(string.Format("{1} finished; created {0} addons", counter, _identifier)); }
void OnLevelWasLoaded(int level) { var scene = (GameScenes)level; KSPAddonImproved.Startup mask = 0; if (scene == GameScenes.LOADINGBUFFER) { return; } switch (scene) { case GameScenes.CREDITS: mask = KSPAddonImproved.Startup.Credits; break; case GameScenes.EDITOR: mask = KSPAddonImproved.Startup.Editor; break; case GameScenes.FLIGHT: mask = KSPAddonImproved.Startup.Flight; break; case GameScenes.LOADING: mask = KSPAddonImproved.Startup.Instantly; break; case GameScenes.LOADINGBUFFER: // intentionally left unset break; case GameScenes.MAINMENU: mask = KSPAddonImproved.Startup.MainMenu; break; case GameScenes.PSYSTEM: mask = KSPAddonImproved.Startup.PSystemSpawn; break; case GameScenes.SETTINGS: mask = KSPAddonImproved.Startup.Settings; break; case GameScenes.SPACECENTER: mask = KSPAddonImproved.Startup.SpaceCenter; break; case GameScenes.TRACKSTATION: mask = KSPAddonImproved.Startup.TrackingStation; break; default: throw new ArgumentException("Unknown game scene"); } KSPAddonImproved.CurrentGameScene = scene; int counter = 0; foreach (var addon in addons) { if (addon.created && addon.RunOnce) { continue; } // This addon was already loaded, should it be initialized for the current scene? if ((addon.Scenes & mask) != 0) { var go = new GameObject(addon.type.Name); go.AddComponent(addon.type); addon.created = true; ++counter; } } }