|
|
@@ -1,138 +0,0 @@
|
|
|
-using GadgetCore.API;
|
|
|
-using GadgetCore.API.ConfigMenu;
|
|
|
-using System;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.Linq;
|
|
|
-using System.Reflection;
|
|
|
-using System.Text;
|
|
|
-using UnityEngine;
|
|
|
-using UnityEngine.UI;
|
|
|
-
|
|
|
-namespace QuickStack
|
|
|
-{
|
|
|
- public class GadgetConfigDropdownComponent : GadgetConfigComponent
|
|
|
- {
|
|
|
- public string Value { get; protected set; }
|
|
|
- public string[] Values { get; protected set; }
|
|
|
- public readonly string DefaultValue;
|
|
|
-
|
|
|
- private readonly Action<string> ValueSetter;
|
|
|
- private RectTransform[] Entries;
|
|
|
-
|
|
|
- public GadgetConfigDropdownComponent(BasicGadgetConfigMenu configMenu, string name, string value, string[] values, Action<string> valueSetter, float height = 0.1f) : base(configMenu, name, height)
|
|
|
- {
|
|
|
- Value = value;
|
|
|
- Values = values;
|
|
|
- ValueSetter = valueSetter;
|
|
|
- }
|
|
|
-
|
|
|
- private T GetFromStatic<T>(string classString, string paramString)
|
|
|
- {
|
|
|
- var type = Type.GetType("GadgetCore" + "." + classString + ", GadgetCore");
|
|
|
- var property = type.GetProperty(paramString, BindingFlags.Public | BindingFlags.Static);
|
|
|
- MethodInfo strGetter = property.GetGetMethod();
|
|
|
- return (T)strGetter.Invoke(null, null);
|
|
|
- }
|
|
|
-
|
|
|
- public override void Build(RectTransform parent)
|
|
|
- {
|
|
|
- var ModConfigMenuText = GetFromStatic<GameObject>("SceneInjector", "ModConfigMenuText");
|
|
|
- var BoxSprite = GetFromStatic<Sprite>("SceneInjector", "BoxSprite");
|
|
|
- var textureMenuTile = GadgetCoreAPI.LoadTexture2D("menuTile.png");
|
|
|
- var MenuTile = Sprite.Create(textureMenuTile, BoxSprite.rect, BoxSprite.pivot, BoxSprite.pixelsPerUnit, default, default, BoxSprite.border);
|
|
|
- if (!string.IsNullOrEmpty(Name))
|
|
|
- {
|
|
|
- StringBuilder nameString = new StringBuilder();
|
|
|
- int spacesAdded = 0;
|
|
|
- foreach (char c in Name)
|
|
|
- {
|
|
|
- if (nameString.Length > 0 && char.IsUpper(c) && !char.IsUpper(Name[nameString.Length - spacesAdded - 1]) && (Name.Length == 1 || !char.IsUpper(Name[nameString.Length - spacesAdded - 2]) || (Name.Length > 2 && !char.IsUpper(Name[nameString.Length - spacesAdded - 3]))))
|
|
|
- {
|
|
|
- spacesAdded++;
|
|
|
- nameString.Append(' ');
|
|
|
- }
|
|
|
- nameString.Append(nameString.Length > 0 ? c : char.ToUpper(c));
|
|
|
- }
|
|
|
- Text label = new GameObject("Label", typeof(RectTransform), typeof(CanvasRenderer), typeof(Text)).GetComponent<Text>();
|
|
|
- label.rectTransform.SetParent(parent);
|
|
|
- label.rectTransform.anchorMin = new Vector2(0f, 0f);
|
|
|
- label.rectTransform.anchorMax = new Vector2(0.25f, 1f);
|
|
|
- label.rectTransform.offsetMin = new Vector2(0, 0);
|
|
|
- label.rectTransform.offsetMax = new Vector2(-10, 0);
|
|
|
- label.text = nameString + ":";
|
|
|
- label.font = ModConfigMenuText.GetComponent<TextMesh>().font;
|
|
|
- label.fontSize = 12;
|
|
|
- label.horizontalOverflow = HorizontalWrapMode.Wrap;
|
|
|
- label.alignment = TextAnchor.MiddleLeft;
|
|
|
- }
|
|
|
- RectTransform button = new GameObject("Button", typeof(RectTransform), typeof(Button), typeof(CanvasRenderer), typeof(Image)).GetComponent<RectTransform>();
|
|
|
- button.SetParent(parent);
|
|
|
- button.anchorMin = new Vector2(0.25f, 0f);
|
|
|
- button.anchorMax = new Vector2(0.75f, 1f);
|
|
|
- button.offsetMin = new Vector2(10, 0);
|
|
|
- button.offsetMax = new Vector2(-10, 0);
|
|
|
- button.GetComponent<Image>().sprite = BoxSprite;
|
|
|
- button.GetComponent<Image>().type = Image.Type.Sliced;
|
|
|
- button.GetComponent<Image>().fillCenter = true;
|
|
|
- button.GetComponent<Button>().onClick.AddListener(() =>
|
|
|
- {
|
|
|
- bool set = Entries[0] != null && !Entries[0].gameObject.active;
|
|
|
- for (int i = 0; i < Entries.Length; i++)
|
|
|
- {
|
|
|
- Entries[i].gameObject.SetActive(set);
|
|
|
- }
|
|
|
- parent.SetAsLastSibling();
|
|
|
- });
|
|
|
- Text buttonLabel = new GameObject("Label", typeof(RectTransform), typeof(CanvasRenderer), typeof(Text)).GetComponent<Text>();
|
|
|
- buttonLabel.rectTransform.SetParent(button);
|
|
|
- buttonLabel.rectTransform.anchorMin = new Vector2(0f, 0f);
|
|
|
- buttonLabel.rectTransform.anchorMax = new Vector2(1f, 1f);
|
|
|
- buttonLabel.rectTransform.offsetMin = new Vector2(2.5f, 2.5f);
|
|
|
- buttonLabel.rectTransform.offsetMax = new Vector2(-2.5f, -2.5f);
|
|
|
- buttonLabel.font = ModConfigMenuText.GetComponent<TextMesh>().font;
|
|
|
- buttonLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
|
|
- buttonLabel.verticalOverflow = VerticalWrapMode.Truncate;
|
|
|
- buttonLabel.alignment = TextAnchor.MiddleCenter;
|
|
|
- buttonLabel.text = Value;
|
|
|
- Entries = new RectTransform[Values.Length];
|
|
|
- for (int i = 0; i < Values.Length; i++)
|
|
|
- {
|
|
|
- int ic = i;
|
|
|
- RectTransform dropButton = new GameObject("Button", typeof(RectTransform), typeof(Button), typeof(CanvasRenderer), typeof(Image)).GetComponent<RectTransform>();
|
|
|
- dropButton.SetParent(button);
|
|
|
- dropButton.anchorMin = new Vector2(0.25f, 0f);
|
|
|
- dropButton.anchorMax = new Vector2(0.75f, 1f);
|
|
|
- dropButton.offsetMin = new Vector2(-42, -24 * i - 24);
|
|
|
- dropButton.offsetMax = new Vector2(42, -24 * i - 24);
|
|
|
- dropButton.GetComponent<Image>().sprite = MenuTile;
|
|
|
- dropButton.GetComponent<Image>().type = Image.Type.Sliced;
|
|
|
- dropButton.GetComponent<Image>().fillCenter = true;
|
|
|
- dropButton.GetComponent<Button>().onClick.AddListener(() =>
|
|
|
- {
|
|
|
- buttonLabel.text = Values[ic];
|
|
|
- Value = Values[ic];
|
|
|
- ValueSetter.Invoke(Values[ic]);
|
|
|
- for (int j = 0; j < Entries.Length; j++)
|
|
|
- {
|
|
|
- Entries[j].gameObject.SetActive(false);
|
|
|
- Entries[j].gameObject.GetComponent<RectTransform>().SetAsLastSibling();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- Text dropButtonLabel = new GameObject("Label", typeof(RectTransform), typeof(CanvasRenderer), typeof(Text)).GetComponent<Text>();
|
|
|
- dropButtonLabel.rectTransform.SetParent(dropButton);
|
|
|
- dropButtonLabel.rectTransform.anchorMin = new Vector2(0f, 0f);
|
|
|
- dropButtonLabel.rectTransform.anchorMax = new Vector2(1f, 1f);
|
|
|
- dropButtonLabel.rectTransform.offsetMin = new Vector2(2.5f, 2.5f);
|
|
|
- dropButtonLabel.rectTransform.offsetMax = new Vector2(-2.5f, -2.5f);
|
|
|
- dropButtonLabel.font = ModConfigMenuText.GetComponent<TextMesh>().font;
|
|
|
- dropButtonLabel.horizontalOverflow = HorizontalWrapMode.Wrap;
|
|
|
- dropButtonLabel.verticalOverflow = VerticalWrapMode.Truncate;
|
|
|
- dropButtonLabel.alignment = TextAnchor.MiddleCenter;
|
|
|
- dropButtonLabel.text = Values[i];
|
|
|
- Entries[i] = dropButton;
|
|
|
- dropButton.gameObject.SetActive(false);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|