public void UpdateUI() { // Update game version UI GameVersion.UpdateUI(ShowUI); // Don't draw the UI if we're not showing it if (!ShowUI) { return; } // Add selection index if not set if (!SelectedMenuItem.Any()) { SelectedMenuItem.Add(0); } // Get current menu var menu = GetCurrentMenu(); var selectedIndex = GetSelectedMenuItemIndex; // TODO: Allow these to be modified from settings // TODO: Only draw within the game frame // UI values int xPos = 50; Color defaultColor = Color.White; Color highlightColor = Color.Yellow; int yPos = 50; const int lineHeight = 20; // Add every menu item for (var i = 0; i < menu.Length; i++) { // Get the menu var m = menu[i]; // Get the name var name = m.DisplayName; // If there are options for the item we add horizontal scroll indicators if (m.Options.Any()) { if (m.CanDecreaseOptionsIndex) { name = $"< {name}"; } if (m.CanIncreaseOptionsIndex) { name = $"{name} >"; } } // If there are children we show an indicator if (m.Children.Any()) { name = $"{name} ->"; } // Add the text to the UI DrawString(xPos, yPos, name, i == selectedIndex ? highlightColor : defaultColor); // Increment the y position yPos += lineHeight; } // Add the back option to return to previous menu if (HasBackOption) { yPos += lineHeight / 2; DrawString(xPos, yPos, "<- Back", selectedIndex == menu.Length ? highlightColor : defaultColor); } Color valueColor = Color.Orange; int valueYPos = 5; int valueXPos = 200; // Add values foreach (var v in Values) { DrawString(valueXPos, valueYPos, v.DisplayText, valueColor); valueYPos += lineHeight; } void DrawString(int x, int y, string str, Color c) { if (RenderUIInGame) { API.Gui.DrawString(x, y, str, c, fontsize: 12, fontstyle: "Bold", backcolor: Color.Black); } else { API.Gui.Text(x, y, str, c); } } }