public void Show(string menu)
 {
     if (MenuCollection.Menus.TryGetValue(menu, out var menuObject))
     {
         currentMenu = menuObject;
         currentPage = menuObject.Pages[0];
         currentItem = GetCurrentItem();
         itemFocused = false;
         menuStack.Push(new MenuState
         {
             Menu = menuObject,
             Page = 0
         });
         isOpen = true;
     }
 }
        public void NextItem()
        {
            var page = currentPage;
            var item = currentItem;

            if (page == null || page.Items.Count == 0)
            {
                return;
            }

            var index = (item?.Index + 1 ?? 0) % page.Items.Count;

            currentItem      = page.Items[index];
            pointerAngle     = currentItem.Angle;
            isPointerVisible = true;
            itemFocused      = true;
        }
 public void Back()
 {
     if (menuStack.Count > 1)
     {
         menuStack.Pop();
         var current = menuStack.Peek();
         currentMenu = current.Menu;
         currentPage = current.Menu.Pages[current.Page];
         currentItem = GetCurrentItem();
         itemFocused = false;
         isOpen      = menuStack.Count != 0;
     }
     else if (menuStack.Count == 1)
     {
         Exit();
     }
 }
        public void PreviousItem()
        {
            var page = currentPage;
            var item = currentItem;

            if (page == null || page.Items.Count == 0)
            {
                return;
            }

            var index = item?.Index - 1 ?? 0;

            if (index < 0)
            {
                index = page.Items.Count - 1;
            }

            currentItem      = page.Items[index];
            pointerAngle     = currentItem.Angle;
            isPointerVisible = true;
            itemFocused      = true;
        }