예제 #1
0
    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));
    }
예제 #2
0
        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;
                }
            }
        }