using UnityEngine; using UnityEngine.UI; using CommonAPI.Systems; using UXAssist.Common; using UXAssist.UI; using GameLogicProc = UXAssist.Common.GameLogic; namespace UXAssist.Functions.UI; internal static class MenuButtonUI { private static bool _initialized; private static PressKeyBind _toggleKey; private static bool _configWinInitialized; private static MyConfigWindow _configWin; private static GameObject _buttonOnPlanetGlobe; public static void Init() { _toggleKey = KeyBindings.RegisterKeyBinding(new BuiltinKey { key = new CombineKey((int)KeyCode.BackQuote, CombineKey.ALT_COMB, ECombineKeyAction.OnceClick, false), conflictGroup = KeyBindConflict.MOVEMENT | KeyBindConflict.FLYING | KeyBindConflict.SAILING | KeyBindConflict.BUILD_MODE_1 | KeyBindConflict.KEYBOARD_KEYBIND, name = "OpenUXAssistConfigWindow", canOverride = true }); I18N.OnInitialized += RecreateConfigWindow; } public static void Start() { } public static void Uninit() { } public static void OnInputUpdate() { if (_toggleKey.keyValue) { ToggleConfigWindow(); } } public static void OnUpdate() { } public static void ToggleConfigWindow() { if (!_configWinInitialized) { if (!I18N.Initialized()) return; _configWinInitialized = true; _configWin = MyConfigWindow.CreateInstance(); } if (_configWin.active) { _configWin._Close(); } else { _configWin.Open(); } } public static void InitMenuButtons() { if (_initialized) return; var uiRoot = UIRoot.instance; if (!uiRoot) return; { var mainMenu = uiRoot.uiMainMenu; var src = mainMenu.newGameButton; var parent = src.transform.parent; var btn = GameObject.Instantiate(src, parent); btn.name = "button-uxassist-config"; var l = btn.text.GetComponent(); if (l != null) { l.stringKey = I18NKeys.UXAssistConfig; l.translation = I18NKeys.UXAssistConfig.Translate(); } btn.text.text = I18NKeys.UXAssistConfig.Translate(); btn.text.fontSize = btn.text.fontSize * 7 / 8; I18N.OnInitialized += () => { btn.text.text = I18NKeys.UXAssistConfig.Translate(); }; var vec = ((RectTransform)mainMenu.exitButton.transform).anchoredPosition3D; var vec2 = ((RectTransform)mainMenu.creditsButton.transform).anchoredPosition3D; var transform1 = (RectTransform)btn.transform; transform1.anchoredPosition3D = new Vector3(vec.x, vec.y + (vec.y - vec2.y) * 2, vec.z); btn.button.onClick.RemoveAllListeners(); btn.button.onClick.AddListener(ToggleConfigWindow); } { var panel = uiRoot.uiGame.planetGlobe; var src = panel.button2; var sandboxMenu = uiRoot.uiGame.sandboxMenu; var icon = sandboxMenu.categoryButtons[6].transform.Find("icon")?.GetComponent()?.sprite; var b = GameObject.Instantiate(src, src.transform.parent); _buttonOnPlanetGlobe = b.gameObject; var rect = (RectTransform)_buttonOnPlanetGlobe.transform; var btn = _buttonOnPlanetGlobe.GetComponent(); var img = _buttonOnPlanetGlobe.transform.Find("button-2/icon")?.GetComponent(); if (img != null) { img.sprite = icon; } if (_buttonOnPlanetGlobe != null && btn != null) { _buttonOnPlanetGlobe.name = "open-uxassist-config"; rect.localScale = new Vector3(0.6f, 0.6f, 0.6f); rect.anchoredPosition3D = new Vector3(64f, -5f, 0f); b.onClick.RemoveAllListeners(); btn.onClick += _ => { ToggleConfigWindow(); }; btn.tips.tipTitle = I18NKeys.UXAssistConfig; I18N.OnInitialized += () => { btn.tips.tipTitle = I18NKeys.UXAssistConfig.Translate(); }; btn.tips.tipText = null; btn.tips.corner = 9; btn.tips.offset = new Vector2(-20f, -20f); _buttonOnPlanetGlobe.SetActive(true); } } AutoCruiseUI.InitToggleAutoCruiseCheckButton(); AutoConstructUI.InitToggleAutoConstructCheckButton(); StarmapFilterUI.InitStarmapButtons(); _initialized = true; } public static void RecreateConfigWindow() { if (!_configWinInitialized) return; var wasActive = _configWin.active; if (wasActive) _configWin._Close(); MyConfigWindow.DestroyInstance(_configWin); _configWinInitialized = false; if (wasActive) ToggleConfigWindow(); } public static void UpdateGlobeButtonPosition(UIPlanetGlobe planetGlobe) { if (_buttonOnPlanetGlobe == null) return; var rect = (RectTransform)_buttonOnPlanetGlobe.transform; if (planetGlobe.dysonSphereSystemUnlocked || planetGlobe.logisticsSystemUnlocked) { rect.anchoredPosition3D = new Vector3(64f, -5f, 0f); } else { rect.anchoredPosition3D = new Vector3(128f, -100f, 0f); } } }