//Content of the menu item should be renewed, in the same window.
    public void AddMenuItemLinkToNewContent(string name, RPGMenuWrapper menuToShowInstead, string helpText = "")
    {
        GameObject gO = Instantiate <GameObject>(RPGMenuItemPrefab, MenuItemBackgroundHolder.transform, false);

        RPGMenuItem item = gO.GetComponent <RPGMenuItem>();

        item.Text              = name;
        item.MenuOfThisItem    = this;
        item.MenuToShowInstead = menuToShowInstead;
        item.HelpText          = helpText;
        item.InteractType      = RPGMenuItemInteractType.MenuItemRenewContent;
        this.MenuItems.Add(item);

        item.transform.GetChild(0).GetComponent <Text>().text = name;
    }
Beispiel #2
0
    void Start()
    {
        RPGMenuWrapper menuWrapper = new RPGMenuWrapper("Battle menu");

        menuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Attack", HelpText = "Execute a standard attack", InteractType = RPGMenuItemInteractType.MenuItemAction
        });

        RPGMenuWrapper subSkillMenuWrapper = new RPGMenuWrapper("MP Skills");

        subSkillMenuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Blaze", InteractType = RPGMenuItemInteractType.MenuItemAction
        });
        subSkillMenuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Booze", InteractType = RPGMenuItemInteractType.MenuItemAction
        });

        RPGMenuWrapper magicMenuWrapper = new RPGMenuWrapper("Magic");

        magicMenuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Fire", HelpText = "Use the power of fire", ActionToPerform = PrepareEvent(Fire), MPCost = 30, InteractType = RPGMenuItemInteractType.MenuItemAction
        });
        magicMenuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Thunder", ActionToPerform = PrepareEvent(Thunder), MPCost = 40, InteractType = RPGMenuItemInteractType.MenuItemAction
        });
        magicMenuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Blizzard", ActionToPerform = PrepareEvent(Blizzard), MPCost = 30, InteractType = RPGMenuItemInteractType.MenuItemAction
        });

        menuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Magic", HelpText = "Use powerful magic", InteractType = RPGMenuItemInteractType.MenuItemRenewContent, MenuToShowInstead = magicMenuWrapper
        });
        menuWrapper.MenuItems.Add(new RPGMenuItemWrapper()
        {
            Text = "Items", HelpText = "Use an item", InteractType = RPGMenuItemInteractType.MenuItemShowNewWindow, MenuToOpen = SecondaryMenu
        });

        GetComponent <RPGMenu>().ReloadMenuData(menuWrapper);

        GameManager.Instance.ChangeMP(0); //Trigger UI update to show correct MP
    }
    void Update()
    {
        //If we aren't on the top level of the menu.
        if (MenuList.Peek() != this)
        {
            return;
        }

        int currentIndex = selectedIndex;

        if (Input.GetKeyDown(KeyCode.S) || Input.GetKeyDown(KeyCode.DownArrow))
        {
            selectedIndex++;
        }
        if (Input.GetKeyDown(KeyCode.W) || Input.GetKeyDown(KeyCode.UpArrow))
        {
            selectedIndex--;
        }
        if (Input.GetKeyDown(KeyCode.Return))
        {
            MenuItems[selectedIndex].Invoke();
        }

        if (Input.GetKeyDown(KeyCode.Backspace))
        {
            if (MenuSectionSequence.Count > 1)
            {
                MenuSectionSequence.Pop();                           //pop the current one

                RPGMenuWrapper previous = MenuSectionSequence.Pop(); //pop the last one and retrieve it
                ReloadMenuData(previous);
            }
            else if (MenuList.Count > 1)
            {
                RPGMenu menu = MenuList.Pop();
                Debug.Log("Closing menu window " + menu.gameObject.name);
                menu.gameObject.SetActive(false);
            }
        }

        if (selectedIndex != currentIndex)
        {
            selectedIndex = Mathf.Clamp(selectedIndex, 0, MenuItems.Count - 1);
            DrawUI();
        }
    }
    public void ReloadMenuData(RPGMenuWrapper wrapper)
    {
        if (MenuSectionSequence == null)
        {
            MenuSectionSequence = new Stack <RPGMenuWrapper>();
        }

        MenuSectionSequence.Push(wrapper);

        for (int i = MenuItems.Count - 1; i >= 0; i--)
        {
            Destroy(MenuItems[i].gameObject);
        }

        MenuItems.Clear();

        foreach (var menuItem in wrapper.MenuItems)
        {
            switch (menuItem.InteractType)
            {
            case RPGMenuItemInteractType.MenuItemAction:
                AddMenuItemToAction(menuItem);
                break;

            case RPGMenuItemInteractType.MenuItemShowNewWindow:
                AddMenuItemLinkToNewWindow(menuItem.Text, menuItem.MenuToOpen, menuItem.HelpText);
                break;

            case RPGMenuItemInteractType.MenuItemRenewContent:
                AddMenuItemLinkToNewContent(menuItem.Text, menuItem.MenuToShowInstead, menuItem.HelpText);
                break;

            default:
                break;
            }
        }

        Debug.Log("Reloading menu data of menu " + this.name + " with contents of section " + wrapper.MenuName);

        //refresh UI
        selectedIndex = 0;
        DrawUI();
    }