using I2.Loc; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; namespace KCM.UI { class KaC_Button { public Button Button = null; private static readonly string[] ButtonPaths = { "TopLevelUICanvas/TopLevel/Body/ButtonContainer/New", "MainMenu/TopLevel/Body/ButtonContainer/New" // fallback for older versions }; public string Name { get => Button.name; set => Button.name = value; } public string Text { get => Button.GetComponentInChildren().text; set => Button.GetComponentInChildren().text = value; } public UnityAction OnClick { set => Button.onClick.AddListener(value); } public Vector3 LocalPosition { get => Transform.localPosition; set => Transform.localPosition = value; } public Vector3 Position { get => Transform.position; set => Transform.position = value; } public Vector3 Size { get => Transform.localScale; set => Transform.localScale = value; } public GameObject GameObject { get => Button.gameObject; } public Transform Transform { get => GameObject.transform; } public bool FirstSibling { set { if (value) Transform.SetAsFirstSibling(); } } public bool LastSibling { set { if (value) Transform.SetAsLastSibling(); } } public int SiblingIndex { set => Transform.SetSiblingIndex(value); } public KaC_Button(Transform parent = null) : this(null, parent) { } public KaC_Button(Button b, Transform parent = null) { var templateButton = ResolveTemplateButton(b); if (templateButton == null) throw new InvalidOperationException("Template button not found in main menu UI."); Button = parent == null ? GameObject.Instantiate(templateButton) : GameObject.Instantiate(templateButton, parent); foreach (Localize Localize in Button.GetComponentsInChildren()) GameObject.Destroy(Localize); Button.onClick = new Button.ButtonClickedEvent(); } private static Button ResolveTemplateButton(Button providedButton) { if (providedButton != null) return providedButton; foreach (var path in ButtonPaths) { var transform = Constants.MainMenuUI_T?.Find(path); if (transform == null) continue; var button = transform.GetComponent