private static void onCreatePauseMenuButtons(Level level, TextMenu menu, bool minimal)
        {
            if (CollabModule.Instance.Session.LobbySID != null)
            {
                // find the position just under "Return to Map".
                int returnToMapIndex = menu.GetItems().FindIndex(item =>
                                                                 item.GetType() == typeof(TextMenu.Button) && ((TextMenu.Button)item).Label == Dialog.Clean("MENU_PAUSE_RETURN"));

                if (returnToMapIndex == -1)
                {
                    // fall back to the bottom of the menu.
                    returnToMapIndex = menu.GetItems().Count - 1;
                }

                // add the "Return to Lobby" button
                TextMenu.Button returnToLobbyButton = new TextMenu.Button(Dialog.Clean("collabutils2_returntolobby"));
                returnToLobbyButton.Pressed(() => {
                    level.PauseMainMenuOpen = false;
                    menu.RemoveSelf();
                    openReturnToLobbyConfirmMenu(level, menu.Selection);
                });
                returnToLobbyButton.ConfirmSfx = "event:/ui/main/message_confirm";
                menu.Insert(returnToMapIndex + 1, returnToLobbyButton);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add an Enter and Leave handler, displaying a description if selected.
        /// </summary>
        /// <param name="option">The input TextMenu.Item option.</param>
        /// <param name="containingMenu">The menu containing the TextMenu.Item option.</param>
        /// <param name="description"></param>
        /// <returns>The passed option.</returns>
        public static TextMenu.Item AddDescription(this TextMenu.Item option, TextMenu containingMenu, string description)
        {
            // build the description menu entry
            TextMenuExt.EaseInSubHeaderExt descriptionText = new TextMenuExt.EaseInSubHeaderExt(description, false, containingMenu)
            {
                TextColor   = Color.Gray,
                HeightExtra = 0f
            };

            List <TextMenu.Item> items = containingMenu.GetItems();

            if (items.Contains(option))
            {
                // insert the description after the option.
                containingMenu.Insert(items.IndexOf(option) + 1, descriptionText);
            }

            option.OnEnter += delegate {
                // make the description appear.
                descriptionText.FadeVisible = true;
            };
            option.OnLeave += delegate {
                // make the description disappear.
                descriptionText.FadeVisible = false;
            };

            return(option);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Add an Enter and Leave handler, notifying the user that a relaunch is required to apply the changes.
        /// </summary>
        /// <param name="option">The input TextMenu.Item option.</param>
        /// <param name="containingMenu">The menu containing the TextMenu.Item option.</param>
        /// <param name="needsRelaunch">This method does nothing if this is set to false.</param>
        /// <returns>The passed option.</returns>
        public static TextMenu.Item NeedsRelaunch(this TextMenu.Item option, TextMenu containingMenu, bool needsRelaunch = true)
        {
            if (!needsRelaunch)
            {
                return(option);
            }

            // build the "Restart is required" text menu entry
            TextMenuExt.EaseInSubHeaderExt needsRelaunchText = new TextMenuExt.EaseInSubHeaderExt(Dialog.Clean("MODOPTIONS_NEEDSRELAUNCH"), false, containingMenu)
            {
                TextColor   = Color.OrangeRed,
                HeightExtra = 0f
            };

            List <TextMenu.Item> items = containingMenu.GetItems();

            if (items.Contains(option))
            {
                // insert the text after the option that needs relaunch.
                containingMenu.Insert(items.IndexOf(option) + 1, needsRelaunchText);
            }

            option.OnEnter += delegate {
                // make the description appear.
                needsRelaunchText.FadeVisible = true;
            };
            option.OnLeave += delegate {
                // make the description disappear.
                needsRelaunchText.FadeVisible = false;
            };

            return(option);
        }
Exemplo n.º 4
0
        private void ModifyLevelMenu(Level level, TextMenu pausemenu, bool minimal)
        {
            if (this.InRandomizer)
            {
                foreach (var item in new System.Collections.Generic.List <TextMenu.Item>(pausemenu.GetItems()))
                {
                    if (item.GetType() == typeof(TextMenu.Button))
                    {
                        var btn = (TextMenu.Button)item;
                        if (btn.Label == Dialog.Clean("MENU_PAUSE_SAVEQUIT") || btn.Label == Dialog.Clean("MENU_PAUSE_RETURN"))
                        {
                            pausemenu.Remove(item);
                        }
                        if (btn.Label == Dialog.Clean("MENU_PAUSE_RESTARTAREA"))
                        {
                            btn.Label = Dialog.Clean("MENU_PAUSE_RESTARTRANDO");
                        }
                    }
                }

                int returnIdx = pausemenu.GetItems().Count;
                pausemenu.Add(new TextMenu.Button(Dialog.Clean("MENU_PAUSE_QUITRANDO")).Pressed(() => {
                    level.PauseMainMenuOpen = false;
                    pausemenu.RemoveSelf();

                    TextMenu menu   = new TextMenu();
                    menu.AutoScroll = false;
                    menu.Position   = new Vector2((float)Engine.Width / 2f, (float)((double)Engine.Height / 2.0 - 100.0));
                    menu.Add(new TextMenu.Header(Dialog.Clean("MENU_QUITRANDO_TITLE")));
                    menu.Add(new TextMenu.Button(Dialog.Clean("MENU_QUITRANDO_CONFIRM")).Pressed((Action)(() => {
                        Engine.TimeRate = 1f;
                        menu.Focused = false;
                        level.Session.InArea = false;
                        Audio.SetMusic((string)null, true, true);
                        Audio.BusStopAll("bus:/gameplay_sfx", true);
                        level.DoScreenWipe(false, (Action)(() => Engine.Scene = (Scene) new LevelExit(LevelExit.Mode.SaveAndQuit, level.Session, level.HiresSnow)), true);
                        foreach (LevelEndingHook component in level.Tracker.GetComponents <LevelEndingHook>())
                        {
                            if (component.OnEnd != null)
                            {
                                component.OnEnd();
                            }
                        }
                    })));
                    menu.Add(new TextMenu.Button(Dialog.Clean("MENU_QUITRANDO_CANCEL")).Pressed((Action)(() => menu.OnCancel())));
                    menu.OnPause = menu.OnESC = (Action)(() => {
                        menu.RemoveSelf();
                        level.Paused = false;
                        Engine.FreezeTimer = 0.15f;
                        Audio.Play("event:/ui/game/unpause");
                    });
                    menu.OnCancel = (Action)(() => {
                        Audio.Play("event:/ui/main/button_back");
                        menu.RemoveSelf();
                        level.Pause(returnIdx, minimal, false);
                    });
                    level.Add((Entity)menu);
                }));
            }
        }
Exemplo n.º 5
0
        public void CreatePauseMenuButtons(Level level, TextMenu menu, bool minimal)
        {
            if (Everest.Flags.IsDisabled || !Settings.ShowModOptionsInGame)
            {
                return;
            }

            List <TextMenu.Item> items = menu.GetItems();
            int index;

            // Find the options button and place our button below it.
            string cleanedOptions = Dialog.Clean("menu_pause_options");

            index = items.FindIndex(_ => {
                TextMenu.Button other = (_ as TextMenu.Button);
                if (other == null)
                {
                    return(false);
                }
                return(other.Label == cleanedOptions);
            });
            if (index != -1)
            {
                index++;
            }
            // Otherwise, place it below the last button.
            else
            {
                index = items.Count;
            }

            TextMenu.Item itemModOptions = null;
            menu.Insert(index, itemModOptions = new TextMenu.Button(Dialog.Clean("menu_pause_modoptions")).Pressed(() => {
                int returnIndex = menu.IndexOf(itemModOptions);
                menu.RemoveSelf();

                level.PauseMainMenuOpen = false;
                level.Paused            = true;

                TextMenu options = OuiModOptions.CreateMenu(true, LevelExt.PauseSnapshot);

                options.OnESC = options.OnCancel = () => {
                    Audio.Play(Sfxs.ui_main_button_back);
                    options.CloseAndRun(Everest.SaveSettings(), () => level.Pause(returnIndex, minimal, false));
                };

                options.OnPause = () => {
                    Audio.Play(Sfxs.ui_main_button_back);
                    options.CloseAndRun(Everest.SaveSettings(), () => {
                        level.Paused       = false;
                        Engine.FreezeTimer = 0.15f;
                    });
                };

                level.Add(options);
            }));
        }
Exemplo n.º 6
0
        private void onCreatePauseMenuButtons(Level level, TextMenu menu, bool minimal)
        {
            int optionsIndex = menu.GetItems().FindIndex(item =>
                                                         item.GetType() == typeof(TextMenu.Button) && ((TextMenu.Button)item).Label == Dialog.Clean("menu_pause_options"));

            // insert ourselves just before Options if required (this is below Variants if variant mode is enabled)
            if (Settings.OptionsOutOfModOptionsMenuEnabled)
            {
                menu.Insert(optionsIndex, AbstractSubmenu.BuildOpenMenuButton <OuiExtendedVariantsSubmenu>(menu, true,
                                                                                                           null /* this is not used when in-game anyway */, new object[] { true }));
            }
        }
Exemplo n.º 7
0
        private void ReloadMenu()
        {
            menu = new TextMenu {
                new TextMenu.Header(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_HEADER")),
                new TextMenu.Button(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_TOGGLEALL")).Pressed(() => {
                    var items = menu.GetItems();
                    if (!(items[2] is TextMenu.OnOff firstToggle))
                    {
                        // ???
                        return;
                    }

                    var newValue = 1 - firstToggle.Index;
                    for (int i = 0; i < items.Count; i++)
                    {
                        if (items[i] is TextMenu.OnOff toggle)
                        {
                            toggle.Index = newValue;
                            toggle.OnValueChange(toggle.Values[newValue].Item2);
                        }
                    }
                }),
            };

            foreach (var key in RandoLogic.AvailableAreas)
            {
                var area = AreaData.Get(key);
                var mode = AreaData.GetMode(key);

                var on   = Settings.MapIncluded(key);
                var name = area.Name;
                name = name.DialogCleanOrNull() ?? name.SpacedPascalCase();
                if (key.Mode != AreaMode.Normal || (area.Mode.Length != 1 && area.Mode[1] != null))
                {
                    name += " " + Char.ToString((char)('A' + (int)key.Mode));
                }

                menu.Add(new TextMenu.OnOff(name, on).Change(this.MakeChangeFunc(key)));
                menu.Add(new TextMenuExt.SubHeaderExt(mode.MapData.LevelCount.ToString() + " " + Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_LEVELS"))
                {
                    HeightExtra = -10f,
                    Offset      = new Vector2(30, -5),
                });
            }

            Scene.Add(menu);
        }
Exemplo n.º 8
0
        public override void Update()
        {
            if (menu != null && menu.Focused && Selected)
            {
                Overworld.Maddy.Show = false;

                if (Input.MenuCancel.Pressed || Input.Pause.Pressed || Input.ESC.Pressed)
                {
                    if (!Searching)
                    {
                        Audio.Play(SFX.ui_main_button_back);
                        Overworld.Goto <OuiChapterSelect>();
                    }
                    else
                    {
                        Searching       = false;
                        MInput.Disabled = false;
                    }
                }
            }

            base.Update();

            if (Searching)
            {
                // Otherwise spacebar will turn on free cam while searching
                ((patch_MountainRenderer)Overworld.Mountain).SetFreeCam(false);
                // Don't allow pressing any buttons while searching
                foreach (TextMenu.Item item in items)
                {
                    item.Disabled = true;
                }
            }

            if (menu != null)
            {
                foreach (TextMenu.Item item in menu.GetItems())
                {
                    item.Disabled = Searching;
                }
            }

            MInput.Disabled = false;
        }
Exemplo n.º 9
0
        public override void CreateModMenuSection(TextMenu menu, bool inGame, EventInstance snapshot)
        {
            // Optional - reload mod settings when entering the mod options.
            // LoadSettings();

            base.CreateModMenuSection(menu, inGame, snapshot);

            if (!inGame)
            {
                List <TextMenu.Item> items = menu.GetItems();

                // change the "key config" labels

                (items[items.Count - 2] as TextMenu.Button).Label = Dialog.Clean("MODOPTIONS_COREMODULE_KEYCONFIG") + " " + (items[items.Count - 2] as TextMenu.Button).Label;
                (items[items.Count - 1] as TextMenu.Button).Label = Dialog.Clean("MODOPTIONS_COREMODULE_KEYCONFIG") + " " + (items[items.Count - 1] as TextMenu.Button).Label;

                // insert extra options before the "key config" options
                menu.Insert(items.Count - 2, new TextMenu.Button(Dialog.Clean("modoptions_coremodule_oobe")).Pressed(() => {
                    OuiModOptions.Instance.Overworld.Goto <OuiOOBE>();
                }));

                menu.Insert(items.Count - 2, new TextMenu.Button(Dialog.Clean("modoptions_coremodule_soundtest")).Pressed(() => {
                    OuiModOptions.Instance.Overworld.Goto <OuiSoundTest>();
                }));

                menu.Insert(items.Count - 2, new TextMenu.Button(Dialog.Clean("modoptions_coremodule_versionlist")).Pressed(() => {
                    OuiModOptions.Instance.Overworld.Goto <OuiVersionList>();
                }));

                menu.Insert(items.Count - 2, new TextMenu.Button(Dialog.Clean("modoptions_coremodule_modupdates")).Pressed(() => {
                    OuiModOptions.Instance.Overworld.Goto <OuiModUpdateList>();
                }));

                menu.Insert(items.Count - 2, new TextMenu.Button(Dialog.Clean("modoptions_coremodule_togglemods")).Pressed(() => {
                    OuiModOptions.Instance.Overworld.Goto <OuiModToggler>();
                }));
            }
        }
Exemplo n.º 10
0
        public void CreatePauseMenuButtons(Level level, TextMenu menu, bool minimal)
        {
            if (Everest.Flags.IsDisabled || !Settings.ShowModOptionsInGame)
            {
                return;
            }

            List <TextMenu.Item> items = menu.GetItems();
            int index;

            // Find the options button and place our button below it.
            string cleanedOptions = Dialog.Clean("menu_pause_options");

            index = items.FindIndex(_ => {
                TextMenu.Button other = (_ as TextMenu.Button);
                if (other == null)
                {
                    return(false);
                }
                return(other.Label == cleanedOptions);
            });
            if (index != -1)
            {
                index++;
            }
            // Otherwise, place it below the last button.
            else
            {
                index = items.Count;
            }

            TextMenu.Item itemModOptions = null;
            menu.Insert(index, itemModOptions = new TextMenu.Button(Dialog.Clean("menu_pause_modoptions")).Pressed(() => {
                int returnIndex = menu.IndexOf(itemModOptions);
                menu.RemoveSelf();

                level.PauseMainMenuOpen = false;
                level.Paused            = true;

                TextMenu options = OuiModOptions.CreateMenu(true, LevelExt.PauseSnapshot);

                options.OnESC = options.OnCancel = () => {
                    Audio.Play(SFX.ui_main_button_back);
                    options.CloseAndRun(Everest.SaveSettings(), () => {
                        level.Pause(returnIndex, minimal, false);

                        // adjust the Mod Options menu position, in case it moved (pause menu entries added/removed after changing mod options).
                        TextMenu textMenu = level.Entities.GetToAdd().FirstOrDefault((Entity e) => e is TextMenu) as TextMenu;
                        TextMenu.Button modOptionsButton = textMenu?.GetItems().OfType <TextMenu.Button>()
                                                           .FirstOrDefault(button => button.Label == Dialog.Clean("menu_pause_modoptions"));
                        if (modOptionsButton != null)
                        {
                            textMenu.Selection = textMenu.IndexOf(modOptionsButton);
                        }
                    });
                };

                options.OnPause = () => {
                    Audio.Play(SFX.ui_main_button_back);
                    options.CloseAndRun(Everest.SaveSettings(), () => {
                        level.Paused       = false;
                        Engine.FreezeTimer = 0.15f;
                    });
                };

                level.Add(options);
            }));
        }
Exemplo n.º 11
0
        private void ReloadMenu()
        {
            menu = new TextMenu {
                new TextMenu.Header(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_HEADER")),
                new TextMenu.Button(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_TOGGLEALL")).Pressed(() => {
                    var items = menu.GetItems();
                    TextMenu.OnOff firstToggle = null;
                    foreach (var item in items)
                    {
                        if (item is TextMenu.OnOff)
                        {
                            firstToggle = item as TextMenu.OnOff;
                            break;
                        }
                    }
                    if (firstToggle == null)
                    {
                        // ???
                        return;
                    }

                    var newValue = 1 - firstToggle.Index;
                    for (int i = 0; i < items.Count; i++)
                    {
                        if (items[i] is TextMenu.OnOff toggle)
                        {
                            toggle.Index = newValue;
                            toggle.OnValueChange(toggle.Values[newValue].Item2);
                        }
                    }
                }),
            };

            var lvlCount = new Dictionary <RandoSettings.AreaKeyNotStupid, int>();

            foreach (var room in RandoLogic.AllRooms)
            {
                var notstupid = new RandoSettings.AreaKeyNotStupid(room.Area);
                if (lvlCount.TryGetValue(notstupid, out int c))
                {
                    lvlCount[notstupid] = c + 1;
                }
                else
                {
                    lvlCount[notstupid] = 1;
                }
            }
            string currentSet = null;

            foreach (var key in RandoLogic.AvailableAreas)
            {
                var area = AreaData.Get(key);
                var mode = AreaData.GetMode(key);

                if (currentSet != area.GetLevelSet())
                {
                    currentSet = area.GetLevelSet();
                    menu.Add(new TextMenu.SubHeader(DialogExt.CleanLevelSet(currentSet)));
                }

                var on   = Settings.MapIncluded(key);
                var name = area.Name;
                name = name.DialogCleanOrNull() ?? name.SpacedPascalCase();
                if (key.Mode != AreaMode.Normal || (area.Mode.Length != 1 && area.Mode[1] != null))
                {
                    name += " " + Char.ToString((char)('A' + (int)key.Mode));
                }

                menu.Add(new TextMenu.OnOff(name, on).Change(this.MakeChangeFunc(key)));
                menu.Add(new TextMenuExt.SubHeaderExt(lvlCount[new RandoSettings.AreaKeyNotStupid(key)].ToString() + " " + Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_LEVELS"))
                {
                    HeightExtra = -10f,
                    Offset      = new Vector2(30, -5),
                });
            }

            if (currentSet != "Celeste")
            {
                menu.Insert(2, new TextMenu.Button(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_RESET")).Pressed(() => {
                    Settings.SetNormalMaps();
                    // this is a stupid way to do this
                    int levelsetIdx = -1;
                    foreach (var item in menu.GetItems())
                    {
                        if (item is TextMenu.SubHeader && !(item is TextMenuExt.SubHeaderExt))
                        {
                            levelsetIdx++;
                        }
                        else if (item is TextMenu.OnOff toggle)
                        {
                            toggle.Index = levelsetIdx == 0 ? 1 : 0;
                        }
                    }
                }));
            }

            Scene.Add(menu);
        }
Exemplo n.º 12
0
        public override void Update()
        {
            musicParamMenuEase = Calc.Approach(musicParamMenuEase, musicParamMenu?.Focused ?? false ? 1 : 0, Engine.DeltaTime * 2f);

            if (!(Selected && Focused))
            {
                goto End;
            }

            if (musicParamMenu.Focused)
            {
                musicParamMenu.Update();
            }

            if (Focused && musicParamMenu != null && Input.MenuJournal.Pressed && musicParamMenu.GetItems().Count != 0)
            {
                musicParamMenu.Selection = musicParamMenu.FirstPossibleSelection;
                musicParamMenu.Focused   = !musicParamMenu.Focused;
            }

            if (Input.MenuRight.Pressed && selectedDigit < (digits.Length - 1) && !musicParamMenu.Focused)
            {
                selectedDigit = Math.Min(selectedDigit + 1, (digits.Length - 1));
                wigglerDigits[selectedDigit].Start();
                Audio.Play(SFX.ui_main_roll_down);
            }
            else if (Input.MenuLeft.Pressed && selectedDigit > 0 && !musicParamMenu.Focused)
            {
                selectedDigit = Math.Max(selectedDigit - 1, 0);
                wigglerDigits[selectedDigit].Start();
                Audio.Play(SFX.ui_main_roll_up);
            }
            else if (Input.MenuDown.Pressed && !musicParamMenu.Focused)
            {
                UpdateDigits(selectedDigit, -1);
            }
            else if (Input.MenuUp.Pressed && !musicParamMenu.Focused)
            {
                UpdateDigits(selectedDigit, +1);
            }
            else if (Input.MenuConfirm.Pressed)
            {
                if (playing != null)
                {
                    Audio.Stop(playing);
                }
                if (!string.IsNullOrEmpty(selectedPath))
                {
                    playing     = playWithMusicParams(selectedPath, musicParams);
                    playingPath = selectedPath;
                }
            }
            else if (Input.MenuCancel.Pressed || Input.Pause.Pressed || Input.ESC.Pressed)
            {
                if (musicParamMenu.Focused)
                {
                    musicParamMenu.Focused = false;
                }
                else
                {
                    Focused = false;
                    Audio.Play(SFX.ui_main_button_back);
                    Overworld.Goto <OuiModOptions>();
                }
            }

End:
            pressedTimer -= Engine.DeltaTime;
            timer        += Engine.DeltaTime;
            for (int i = 0; i < digits.Length; i++)
            {
                wigglerDigits[i].Update();
            }
            wigglerPath.Update();
            wigglerBankPath.Update();
        }
Exemplo n.º 13
0
        private void ReloadMenu()
        {
            menu = new TextMenu {
                new TextMenu.Header(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_HEADER")),
                new TextMenu.Button(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_TOGGLEALL")).Pressed(() => {
                    var items = menu.GetItems();
                    TextMenu.OnOff firstToggle = null;
                    foreach (var item in items)
                    {
                        if (item is TextMenu.OnOff)
                        {
                            firstToggle = item as TextMenu.OnOff;
                            break;
                        }
                    }
                    if (firstToggle == null)
                    {
                        // ???
                        return;
                    }

                    var newValue = 1 - firstToggle.Index;
                    for (int i = 0; i < items.Count; i++)
                    {
                        if (items[i] is TextMenu.OnOff toggle)
                        {
                            toggle.Index = newValue;
                            toggle.OnValueChange(toggle.Values[newValue].Item2);
                        }
                    }
                }),
            };

            // Create submenu for Celeste, campaigns, then other levelsets
            AddLevelSetMenu("Celeste");
            List <string> completedLevelSets = new List <string> {
                "Celeste"
            };

            var campaigns = RandoModule.Instance.MetaConfig.Campaigns;

            foreach (RandoMetadataCampaign campaign in campaigns)
            {
                menu.Add(new TextMenu.SubHeader(DialogExt.CleanLevelSet(campaign.Name)));
                foreach (RandoMetadataLevelSet levelSet in campaign.LevelSets)
                {
                    var name = levelSet.Name;
                    if (RandoLogic.LevelSets.TryGetValue(levelSet.ID, out var keys))
                    {
                        AddLevelSetToggle(name, keys);
                        completedLevelSets.Add(levelSet.ID);
                    }
                }
            }

            foreach (string levelSet in RandoLogic.LevelSets.Keys)
            {
                if (!completedLevelSets.Contains(levelSet))
                {
                    AddLevelSetMenu(levelSet);
                }
            }

            // If Celeste is not the only levelset, Reset should turn all other levelsets off
            if (RandoLogic.LevelSets.Count > 1)
            {
                menu.Insert(2, new TextMenu.Button(Dialog.Clean("MODOPTIONS_RANDOMIZER_MAPPICKER_RESET")).Pressed(() => {
                    Settings.SetNormalMaps();
                    // this is a stupid way to do this
                    int levelsetIdx = -1;
                    foreach (var item in menu.GetItems())
                    {
                        if (item is TextMenu.SubHeader && !(item is TextMenuExt.SubHeaderExt))
                        {
                            levelsetIdx++;
                        }
                        else if (item is TextMenu.OnOff toggle)
                        {
                            toggle.Index = levelsetIdx == 0 ? 1 : 0;
                        }
                    }
                }));
            }

            Scene.Add(menu);
        }