//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; }
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(); }