Exemple #1
0
        private ReloadingDatabaseDialog(ModuleManager parent)
        {
            bool startedReload = false;

            this.parent = parent;

            UISkinDef skinDef           = HighLogic.UISkin;
            UIStyle   centeredTextStyle = new UIStyle()           // FIXME: There must be a smarter way to do that on Unity5, right?
            {
                name          = skinDef.label.name,
                normal        = skinDef.label.normal,
                highlight     = skinDef.label.highlight,
                disabled      = skinDef.label.disabled,
                font          = skinDef.label.font,
                fontSize      = skinDef.label.fontSize,
                fontStyle     = skinDef.label.fontStyle,
                wordWrap      = skinDef.label.wordWrap,
                richText      = skinDef.label.richText,
                alignment     = TextAnchor.UpperCenter,
                clipping      = skinDef.label.clipping,
                lineHeight    = skinDef.label.lineHeight,
                stretchHeight = skinDef.label.stretchHeight,
                stretchWidth  = skinDef.label.stretchWidth,
                fixedHeight   = skinDef.label.fixedHeight,
                fixedWidth    = skinDef.label.fixedWidth
            };

            float totalLoadWeight = GameDatabase.Instance.LoadWeight() + PartLoader.Instance.LoadWeight();

            PopupDialog reloadingDialog = PopupDialog.SpawnPopupDialog(
                new Vector2(0.5f, 0.5f),
                new Vector2(0.5f, 0.5f),
                new MultiOptionDialog(
                    "ModuleManagerReloading",
                    "",
                    "ModuleManager - Reloading Database",
                    skinDef,
                    new Rect(0.5f, 0.5f, 600f, 60f),
                    new DialogGUIFlexibleSpace(),
                    new DialogGUIVerticalLayout(
                        new DialogGUIFlexibleSpace(),
                        new DialogGUILabel(delegate()
            {
                float progressFraction;
                if (!startedReload)
                {
                    progressFraction = 0f;
                    startedReload    = true;
                }
                else if (!GameDatabase.Instance.IsReady() || !PostPatchLoader.Instance.IsReady())
                {
                    progressFraction  = GameDatabase.Instance.ProgressFraction() * GameDatabase.Instance.LoadWeight();
                    progressFraction /= totalLoadWeight;
                }
                else if (!PartLoader.Instance.IsReady())
                {
                    progressFraction  = GameDatabase.Instance.LoadWeight() + (PartLoader.Instance.ProgressFraction() * GameDatabase.Instance.LoadWeight());
                    progressFraction /= totalLoadWeight;
                }
                else
                {
                    progressFraction = 1f;
                }

                return($"Overall progress: {progressFraction:P0}");
            }, centeredTextStyle, expandW : true),
                        new DialogGUILabel(delegate()
            {
                if (!startedReload)
                {
                    return("Starting");
                }
                else if (!GameDatabase.Instance.IsReady())
                {
                    return(GameDatabase.Instance.ProgressTitle());
                }
                else if (!PostPatchLoader.Instance.IsReady())
                {
                    return(PostPatchLoader.Instance.ProgressTitle());
                }
                else if (!PartLoader.Instance.IsReady())
                {
                    return(PartLoader.Instance.ProgressTitle());
                }
                else
                {
                    return("");
                }
            }),
                        new DialogGUISpace(5f),
                        new DialogGUILabel(() => this.parent.patchRunner.Status)
                        )
                    ),
                false,
                skinDef);
        }
Exemple #2
0
        /* Not required anymore. At least
         * public static bool IsABadIdea()
         * {
         *  return (intPtr.ToInt64() == long.MaxValue) && (Environment.OSVersion.Platform == PlatformID.Win32NT);
         * }
         */

        private IEnumerator DataBaseReloadWithMM(bool dump = false)
        {
            QualitySettings.vSyncCount  = 0;
            Application.targetFrameRate = -1;

            patchRunner = new MMPatchRunner(new PrefixLogger("ModuleManager", new UnityLogger(Debug.unityLogger)));

            float totalLoadWeight = GameDatabase.Instance.LoadWeight() + PartLoader.Instance.LoadWeight();
            bool  startedReload   = false;

            UISkinDef skinDef           = HighLogic.UISkin;
            UIStyle   centeredTextStyle = new UIStyle(skinDef.label)
            {
                alignment = TextAnchor.UpperCenter
            };

            PopupDialog reloadingDialog = PopupDialog.SpawnPopupDialog(new Vector2(0.5f, 0.5f),
                                                                       new Vector2(0.5f, 0.5f),
                                                                       new MultiOptionDialog(
                                                                           "ModuleManagerReloading",
                                                                           "",
                                                                           "ModuleManager - Reloading Database",
                                                                           skinDef,
                                                                           new Rect(0.5f, 0.5f, 600f, 60f),
                                                                           new DialogGUIFlexibleSpace(),
                                                                           new DialogGUIVerticalLayout(
                                                                               new DialogGUIFlexibleSpace(),
                                                                               new DialogGUILabel(delegate()
            {
                float progressFraction;
                if (!startedReload)
                {
                    progressFraction = 0f;
                }
                else if (!GameDatabase.Instance.IsReady() || !PostPatchLoader.Instance.IsReady())
                {
                    progressFraction  = GameDatabase.Instance.ProgressFraction() * GameDatabase.Instance.LoadWeight();
                    progressFraction /= totalLoadWeight;
                }
                else if (!PartLoader.Instance.IsReady())
                {
                    progressFraction  = GameDatabase.Instance.LoadWeight() + (PartLoader.Instance.ProgressFraction() * GameDatabase.Instance.LoadWeight());
                    progressFraction /= totalLoadWeight;
                }
                else
                {
                    progressFraction = 1f;
                }

                return($"Overall progress: {progressFraction:P0}");
            }, centeredTextStyle, expandW : true),
                                                                               new DialogGUILabel(delegate()
            {
                if (!startedReload)
                {
                    return("Starting");
                }
                else if (!GameDatabase.Instance.IsReady())
                {
                    return(GameDatabase.Instance.ProgressTitle());
                }
                else if (!PostPatchLoader.Instance.IsReady())
                {
                    return(PostPatchLoader.Instance.ProgressTitle());
                }
                else if (!PartLoader.Instance.IsReady())
                {
                    return(PartLoader.Instance.ProgressTitle());
                }
                else
                {
                    return("");
                }
            }),
                                                                               new DialogGUISpace(5f),
                                                                               new DialogGUILabel(() => patchRunner.Status)
                                                                               )
                                                                           ),
                                                                       false,
                                                                       skinDef);

            yield return(null);

            GameDatabase.Instance.Recompile = true;
            GameDatabase.Instance.StartLoad();

            startedReload = true;

            yield return(null);

            StartCoroutine(patchRunner.Run());

            // wait for it to finish
            while (!GameDatabase.Instance.IsReady())
            {
                yield return(null);
            }

            PostPatchLoader.Instance.StartLoad();

            while (!PostPatchLoader.Instance.IsReady())
            {
                yield return(null);
            }

            if (dump)
            {
                OutputAllConfigs();
            }

            PartLoader.Instance.StartLoad();

            while (!PartLoader.Instance.IsReady())
            {
                yield return(null);
            }

            // Needs more work.
            //ConfigNode game = HighLogic.CurrentGame.config.GetNode("GAME");

            //if (game != null && ResearchAndDevelopment.Instance != null)
            //{
            //    ScreenMessages.PostScreenMessage("GAME found");
            //    ConfigNode scenario = game.GetNodes("SCENARIO").FirstOrDefault((ConfigNode n) => n.name == "ResearchAndDevelopment");
            //    if (scenario != null)
            //    {
            //        ScreenMessages.PostScreenMessage("SCENARIO found");
            //        ResearchAndDevelopment.Instance.OnLoad(scenario);
            //    }
            //}

            QualitySettings.vSyncCount  = GameSettings.SYNC_VBL;
            Application.targetFrameRate = GameSettings.FRAMERATE_LIMIT;

            reloadingDialog.Dismiss();
        }
        private void OpenMainWindow()
        {
            if (mainWindow != null)
            {
                Destroy(mainWindow);
                mainWindow = null;
            }
            if (appButton?.toggleButton?.CurrentState == KSP.UI.UIRadioButton.State.False)
            {
                return;
            }
            UISkinDef skin = UISkinManager.defaultSkin;

            // main window
            mainWindow = new GameObject("AdjustableModPanelWindow");
            mainWindow.AddComponent <CanvasRenderer> ();
            var transform = mainWindow.AddComponent <RectTransform> ();
            var image     = mainWindow.AddComponent <UnityEngine.UI.Image> ();

            image.sprite = skin.window.normal.background;
            image.type   = UnityEngine.UI.Image.Type.Sliced;
            // put in the center of the screen
            transform.anchorMin = new Vector2(0.5f, 0.5f);
            transform.anchorMax = new Vector2(0.5f, 0.5f);
            transform.pivot     = new Vector2(0.5f, 0.5f);
            var vert = mainWindow.AddComponent <UnityEngine.UI.VerticalLayoutGroup> ();

            vert.spacing = 3;
            vert.padding = new RectOffset(5, 5, 5, 5);
            var horzfitter = mainWindow.AddComponent <UnityEngine.UI.ContentSizeFitter> ();

            horzfitter.verticalFit   = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize;
            horzfitter.horizontalFit = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize;

            // header
            var line = new GameObject();

            line.AddComponent <RectTransform> ();
            var horlayout = line.AddComponent <UnityEngine.UI.HorizontalLayoutGroup> ();

            horlayout.spacing = 5;
            // header spacing
            var elem = new GameObject();

            elem.AddComponent <RectTransform> ();
            var layout = elem.AddComponent <UnityEngine.UI.LayoutElement> ();

            layout.preferredHeight = 30;
            layout.preferredWidth  = 255 + 55;
            elem.transform.SetParent(line.transform);
            // header elements
            foreach (var scene in appScenesNames)
            {
                elem = new GameObject();
                elem.AddComponent <CanvasRenderer> ();
                elem.AddComponent <RectTransform> ();
                layout = elem.AddComponent <UnityEngine.UI.LayoutElement> ();
                var text = elem.AddComponent <TMPro.TextMeshProUGUI> ();
                text.text              = scene.Value;
                text.font              = UISkinManager.TMPFont;
                text.fontSize          = 14;
                text.color             = Color.white;
                text.fontStyle         = TMPro.FontStyles.Bold;
                text.alignment         = TMPro.TextAlignmentOptions.Center;
                layout.preferredHeight = 30;
                layout.preferredWidth  = 70;
                elem.transform.SetParent(line.transform);
            }
            line.transform.SetParent(mainWindow.transform);

            int num = 0;

            foreach (var mod in descriptors)
            {
                if (!mod.unmanageable && mod.defaultScenes != ApplicationLauncher.AppScenes.NEVER && mod.modIcon != null)
                {
                    num++;
                }
            }

            Transform contentTransform = null;

            if (num < 11)
            {
                contentTransform = mainWindow.transform;
            }
            else
            {
                // scroller
                var scrollobj = new GameObject();
                transform = scrollobj.AddComponent <RectTransform> ();
                layout    = scrollobj.AddComponent <UnityEngine.UI.LayoutElement> ();
                layout.preferredHeight = 500;
                layout.preferredWidth  = 630;
                scrollobj.transform.SetParent(mainWindow.transform);
                var scroll = scrollobj.AddComponent <UnityEngine.UI.ScrollRect> ();
                scroll.horizontal        = false;
                scroll.vertical          = true;
                scroll.scrollSensitivity = 10f;
                var viewport = new GameObject();
                viewport.AddComponent <CanvasRenderer> ();
                transform = viewport.AddComponent <RectTransform> ();
                viewport.AddComponent <UnityEngine.UI.Image> ();
                viewport.AddComponent <UnityEngine.UI.Mask> ().showMaskGraphic = false;
                viewport.transform.SetParent(scrollobj.transform);
                transform.anchorMin = Vector2.zero;
                transform.anchorMax = Vector2.one;
                transform.pivot     = new Vector2(0.5f, 0.5f);
                transform.sizeDelta = Vector2.zero;
                scroll.viewport     = transform;
                var content = new GameObject();
                transform = content.AddComponent <RectTransform> ();
                content.AddComponent <UnityEngine.UI.VerticalLayoutGroup> ();
                var fitter = content.AddComponent <UnityEngine.UI.ContentSizeFitter> ();
                fitter.verticalFit   = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize;
                fitter.horizontalFit = UnityEngine.UI.ContentSizeFitter.FitMode.PreferredSize;
                content.transform.SetParent(viewport.transform);
                scroll.content      = transform;
                transform.anchorMin = new Vector2(0f, 1f);
                transform.anchorMax = new Vector2(0f, 1f);
                transform.pivot     = new Vector2(0f, 1f);
                transform.sizeDelta = Vector2.zero;
                // scrollbar
                var scrollbar = new GameObject();
                scrollbar.AddComponent <CanvasRenderer> ();
                transform    = scrollbar.AddComponent <RectTransform> ();
                image        = scrollbar.AddComponent <UnityEngine.UI.Image> ();
                image.sprite = skin.verticalScrollbar.normal.background;
                image.type   = UnityEngine.UI.Image.Type.Sliced;
                var scrollbarcomp = scrollbar.AddComponent <UnityEngine.UI.Scrollbar> ();
                scrollbarcomp.direction = UnityEngine.UI.Scrollbar.Direction.BottomToTop;
                scrollbar.transform.SetParent(scrollobj.transform);
                transform.anchorMin = new Vector2(1f, 0f);
                transform.anchorMax = Vector2.one;
                transform.pivot     = Vector2.one;
                transform.sizeDelta = new Vector2(20, 0);
                // scrollbar handle
                var handle = new GameObject();
                handle.AddComponent <CanvasRenderer> ();
                transform    = handle.AddComponent <RectTransform> ();
                image        = handle.AddComponent <UnityEngine.UI.Image> ();
                image.sprite = skin.verticalScrollbarThumb.normal.background;
                image.type   = UnityEngine.UI.Image.Type.Sliced;
                scrollbarcomp.targetGraphic = image;
                scrollbarcomp.transition    = UnityEngine.UI.Selectable.Transition.SpriteSwap;
                var spritestate = scrollbarcomp.spriteState;
                spritestate.highlightedSprite = skin.verticalScrollbarThumb.highlight.background;
                spritestate.pressedSprite     = skin.verticalScrollbarThumb.active.background;
                spritestate.disabledSprite    = skin.verticalScrollbarThumb.disabled.background;
                scrollbarcomp.spriteState     = spritestate;
                handle.transform.SetParent(scrollbar.transform);
                scrollbarcomp.handleRect = transform;
                scroll.verticalScrollbar = scrollbarcomp;
                contentTransform         = content.transform;
                // reset config to fix some weirdness
                scrollbar.SetActive(false);
                scrollbar.SetActive(true);
                scrollobj.SetActive(false);
                scrollobj.SetActive(true);
                transform.offsetMin = Vector2.zero;
                transform.offsetMax = Vector2.zero;
            }

            foreach (var mod in descriptors)
            {
                if (mod.unmanageable || mod.modIcon == null || mod.defaultScenes == ApplicationLauncher.AppScenes.NEVER)
                {
                    continue;
                }
                // mod lines
                line = new GameObject();
                line.AddComponent <RectTransform> ();
                horlayout         = line.AddComponent <UnityEngine.UI.HorizontalLayoutGroup> ();
                horlayout.spacing = 5;
                // pinned toggle element
                elem = new GameObject();
                elem.AddComponent <RectTransform> ();
                layout = elem.AddComponent <UnityEngine.UI.LayoutElement> ();
                layout.preferredHeight = 50;
                layout.preferredWidth  = 50;
                if (!GetType().Module.Name.StartsWith(mod.module))
                {
                    // toggle
                    var toggle = new GameObject();
                    toggle.AddComponent <CanvasRenderer> ();
                    transform           = toggle.AddComponent <RectTransform> ();
                    transform.anchorMin = new Vector2(0.5f, 0.5f);
                    transform.anchorMax = new Vector2(0.5f, 0.5f);
                    transform.pivot     = new Vector2(0.5f, 0.5f);
                    transform.sizeDelta = new Vector2(50, 50);
                    image        = toggle.AddComponent <UnityEngine.UI.Image> ();
                    image.sprite = normalPin;
                    image.type   = UnityEngine.UI.Image.Type.Sliced;
                    var togglecomp = toggle.AddComponent <UnityEngine.UI.Toggle> ();
                    togglecomp.targetGraphic = image;
                    togglecomp.image.sprite  = normalPin;
                    togglecomp.image.type    = UnityEngine.UI.Image.Type.Sliced;
                    togglecomp.transition    = UnityEngine.UI.Selectable.Transition.SpriteSwap;
                    var spritestatet = togglecomp.spriteState;
                    spritestatet.highlightedSprite = highlightedPin;
                    spritestatet.pressedSprite     = activePin;
                    spritestatet.disabledSprite    = normalPin;
                    togglecomp.spriteState         = spritestatet;
                    // checkbox for toggle
                    var check = new GameObject();
                    check.AddComponent <CanvasRenderer> ();
                    transform = check.AddComponent <RectTransform> ();
                    check.transform.SetParent(toggle.transform);
                    transform.anchorMin = new Vector2(0f, 0f);
                    transform.anchorMax = new Vector2(1f, 1f);
                    transform.pivot     = new Vector2(0.5f, 0.5f);
                    transform.sizeDelta = Vector2.zero;
                    image = check.AddComponent <UnityEngine.UI.Image> ();
                    togglecomp.graphic = image;
                    image.sprite       = activePin;
                    image.type         = UnityEngine.UI.Image.Type.Sliced;
                    // toggle setup
                    togglecomp.interactable = true;
                    togglecomp.isOn         = pinnedMods[mod];
                    togglecomp.onValueChanged.AddListener((value) => {
                        pinnedMods[mod] = value;
                        Debug.Log("[Adjustable Mod Panel] New pinned value for " + mod.module + ": " + value);
                        forceUpdateCount += 1;
                    });
                    var navigation = togglecomp.navigation;
                    navigation.mode       = UnityEngine.UI.Navigation.Mode.None;
                    togglecomp.navigation = navigation;
                    toggle.transform.SetParent(elem.transform);
                }
                elem.transform.SetParent(line.transform);
                // mod icon
                elem = new GameObject();
                elem.AddComponent <CanvasRenderer> ();
                elem.AddComponent <RectTransform> ();
                var rimage = elem.AddComponent <UnityEngine.UI.RawImage> ();
                rimage.texture         = mod.modIcon;
                layout                 = elem.AddComponent <UnityEngine.UI.LayoutElement> ();
                layout.preferredHeight = 50;
                layout.preferredWidth  = 50;
                elem.transform.SetParent(line.transform);
                // mod name
                elem = new GameObject();
                elem.AddComponent <CanvasRenderer> ();
                elem.AddComponent <RectTransform> ();
                layout = elem.AddComponent <UnityEngine.UI.LayoutElement> ();
                var text = elem.AddComponent <TMPro.TextMeshProUGUI> ();
                text.text              = mod.module;
                text.font              = UISkinManager.TMPFont;
                text.fontSize          = 14;
                text.color             = Color.white;
                text.fontStyle         = TMPro.FontStyles.Bold;
                text.alignment         = TMPro.TextAlignmentOptions.MidlineLeft;
                layout.preferredHeight = 50;
                layout.preferredWidth  = 200;
                elem.transform.SetParent(line.transform);
                foreach (var scene in appScenesNames)
                {
                    // mod line elements
                    elem = new GameObject();
                    elem.AddComponent <RectTransform> ();
                    layout = elem.AddComponent <UnityEngine.UI.LayoutElement> ();
                    layout.preferredHeight = 50;
                    layout.preferredWidth  = 70;
                    // toggle
                    var toggle = new GameObject();
                    toggle.AddComponent <CanvasRenderer> ();
                    transform           = toggle.AddComponent <RectTransform> ();
                    transform.anchorMin = new Vector2(0.5f, 0.5f);
                    transform.anchorMax = new Vector2(0.5f, 0.5f);
                    transform.pivot     = new Vector2(0.5f, 0.5f);
                    transform.sizeDelta = new Vector2(50, 50);
                    image        = toggle.AddComponent <UnityEngine.UI.Image> ();
                    image.sprite = skin.toggle.normal.background;
                    image.type   = UnityEngine.UI.Image.Type.Sliced;
                    var togglecomp = toggle.AddComponent <UnityEngine.UI.Toggle> ();
                    togglecomp.targetGraphic = image;
                    togglecomp.image.sprite  = skin.toggle.normal.background;
                    togglecomp.image.type    = UnityEngine.UI.Image.Type.Sliced;
                    togglecomp.transition    = UnityEngine.UI.Selectable.Transition.SpriteSwap;
                    var spritestate = togglecomp.spriteState;
                    spritestate.highlightedSprite = skin.toggle.highlight.background;
                    spritestate.pressedSprite     = skin.toggle.active.background;
                    spritestate.disabledSprite    = skin.toggle.disabled.background;
                    togglecomp.spriteState        = spritestate;
                    // checkbox for toggle
                    var check = new GameObject();
                    check.AddComponent <CanvasRenderer> ();
                    transform = check.AddComponent <RectTransform> ();
                    check.transform.SetParent(toggle.transform);
                    transform.anchorMin = new Vector2(0f, 0f);
                    transform.anchorMax = new Vector2(1f, 1f);
                    transform.pivot     = new Vector2(0.5f, 0.5f);
                    transform.sizeDelta = Vector2.zero;
                    image = check.AddComponent <UnityEngine.UI.Image> ();
                    togglecomp.graphic = image;
                    image.sprite       = skin.toggle.active.background;
                    image.type         = UnityEngine.UI.Image.Type.Sliced;
                    // parameters
                    var parameters = toggle.AddComponent <ToggleParameters> ();
                    parameters.currentModKey   = mod;
                    parameters.toggleModScenes = scene.Key;
                    // checkbox state
                    bool allowed = (mod.defaultScenes & scene.Key) != ApplicationLauncher.AppScenes.NEVER;
                    ApplicationLauncher.AppScenes curvalue = currentScenes[mod];
                    if (pendingChanges.ContainsKey(mod))
                    {
                        curvalue = pendingChanges[mod];
                    }
                    bool enabled = (curvalue & (scene.Key & (~mod.requiredScenes))) != ApplicationLauncher.AppScenes.NEVER;
                    togglecomp.interactable = allowed;
                    togglecomp.isOn         = allowed & enabled;
                    if (!allowed)
                    {
                        togglecomp.GetComponent <UnityEngine.UI.Image> ().color = new Color(0f, 0f, 0f, 0.25f);
                    }
                    // special case for "always on"
                    if ((parameters.toggleModScenes & (~mod.requiredScenes)) == ApplicationLauncher.AppScenes.NEVER)
                    {
                        image.color     = Color.gray;
                        togglecomp.isOn = true;
                        // just keep it always on
                        togglecomp.onValueChanged.AddListener((value) => {
                            if (!value)
                            {
                                togglecomp.isOn = true;
                            }
                        });
                    }
                    else
                    {
                        // checkbox callback
                        togglecomp.onValueChanged.AddListener((value) => {
                            ApplicationLauncher.AppScenes currentvalue = currentScenes[mod];
                            if (pendingChanges.ContainsKey(mod))
                            {
                                currentvalue = pendingChanges[mod];
                            }
                            if (value != ((currentvalue & (parameters.toggleModScenes & (~mod.requiredScenes))) != ApplicationLauncher.AppScenes.NEVER))
                            {
                                if (value)
                                {
                                    pendingChanges[mod] = currentvalue | (parameters.toggleModScenes & mod.defaultScenes);
                                }
                                else
                                {
                                    pendingChanges[mod] = (currentvalue & (~parameters.toggleModScenes)) | mod.requiredScenes;
                                }
                                Debug.Log("[Adjustable Mod Panel] New value for " + parameters.currentModKey.module + ": " + pendingChanges[mod]);
                                forceUpdateCount += 1;
                                UpdateToggles();
                            }
                        });
                    }
                    var navigation = togglecomp.navigation;
                    navigation.mode       = UnityEngine.UI.Navigation.Mode.None;
                    togglecomp.navigation = navigation;
                    toggle.transform.SetParent(elem.transform);
                    elem.transform.SetParent(line.transform);
                }
                line.transform.SetParent(contentTransform);
            }
            // input locks
            mainWindow.transform.SetParent(MainCanvasUtil.MainCanvas.transform);
            var trigger      = mainWindow.AddComponent <UnityEngine.EventSystems.EventTrigger> ();
            var onMouseEnter = new UnityEngine.EventSystems.EventTrigger.Entry()
            {
                eventID = UnityEngine.EventSystems.EventTriggerType.PointerEnter
            };

            onMouseEnter.callback.AddListener((data) => InputLockManager.SetControlLock(ControlTypes.ALLBUTCAMERAS, "adjustablemodpanellock"));
            trigger.triggers.Add(onMouseEnter);
            var onMouseExit = new UnityEngine.EventSystems.EventTrigger.Entry()
            {
                eventID = UnityEngine.EventSystems.EventTriggerType.PointerExit
            };

            onMouseExit.callback.AddListener((data) => InputLockManager.RemoveControlLock("adjustablemodpanellock"));
            trigger.triggers.Add(onMouseExit);
            mainWindow.SetActive(true);
        }