Example #1
0
        private async Task <int> RunSubMenu(SubMenu menu)
        {
            this.menu = menu;

            menuRenderer.Menu = menu;

            for (int i = 0; i < menu.theList.Count; i++)
            {
                if (menu.theList[i].Length + 6 > menu.width)
                {
                    menu.width = menu.theList[i].Length + 6;
                }
            }

            string displayTitle = "Choose " + menu.title;

            if (displayTitle.Length + 2 > menu.width)
            {
                menu.width = displayTitle.Length + 2;
            }

            try
            {
                gameControl.PushRenderer(menuRenderer);

                Keys key;

                do
                {
                    key = await gameControl.WaitForKey(showPrompt : false);

                    if (key == Keys.Up)
                    {
                        menu.value--;
                        if (menu.value < 0)
                        {
                            menu.value = 0;
                        }
                    }
                    if (key == Keys.Down)
                    {
                        menu.value++;
                        if (menu.value >= menu.theList.Count)
                        {
                            menu.value = menu.theList.Count - 1;
                        }
                    }
                    else if (key >= Keys.D0)
                    {
                        int v;

                        if (key >= Keys.A)
                        {
                            v  = (int)(key) - (int)(Keys.A);
                            v += 10;
                        }
                        else
                        {
                            v = key - Keys.D0;
                        }

                        if (v < menu.theList.Count)
                        {
                            menu.value = v;
                            key        = Keys.Enter;
                        }
                    }
                } while (key != Keys.Enter);

                await gameControl.WaitAsync(300);
            }
            finally
            {
                gameControl.PopRenderer(menuRenderer);
            }

            return(menu.value);
        }