1
0
mirror of https://github.com/soarqin/DSP_Mods.git synced 2025-12-09 12:13:31 +08:00
This commit is contained in:
2023-09-06 03:22:54 +08:00
parent ba0bf07614
commit 18505caa3b
4 changed files with 314 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
using System;
using UnityEngine;
using UnityEngine.UI;
namespace CheatEnabler.UI;
// MyCheckBox modified from LSTM: https://github.com/hetima/DSP_LSTM/blob/main/LSTM/MyCheckBox.cs
public class MyCheckBox : MonoBehaviour
{
public UIButton uiButton;
public Image checkImage;
public RectTransform rectTrans;
public Text labelText;
public event Action OnChecked;
public bool Checked
{
get => _checked;
set
{
_checked = value;
checkImage.enabled = value;
}
}
private bool _checked;
public static MyCheckBox CreateCheckBox(bool check, Transform parent = null, float x = 0f, float y = 0f, string label = "", int fontSize = 15)
{
var buildMenu = UIRoot.instance.uiGame.buildMenu;
var src = buildMenu.uxFacilityCheck;
var go = Instantiate(src.gameObject);
var rect = go.transform as RectTransform;
if (rect == null)
{
return null;
}
go.name = "my-checkbox";
var cb = go.AddComponent<MyCheckBox>();
cb._checked = check;
if (parent != null)
{
rect.SetParent(parent);
}
rect.anchorMax = new Vector2(0f, 1f);
rect.anchorMin = new Vector2(0f, 1f);
rect.pivot = new Vector2(0f, 1f);
rect.anchoredPosition3D = new Vector3(x, -y, 0f);
cb.rectTrans = rect;
cb.uiButton = go.GetComponent<UIButton>();
cb.checkImage = go.transform.Find("checked")?.GetComponent<Image>();
var child = go.transform.Find("text");
if (child != null)
{
DestroyImmediate(child.GetComponent<Localizer>());
cb.labelText = child.GetComponent<Text>();
cb.labelText.fontSize = fontSize;
cb.SetLabelText(label);
}
//value
cb.uiButton.onClick += cb.OnClick;
if (cb.checkImage != null)
{
cb.checkImage.enabled = check;
}
return cb;
}
public void SetLabelText(string val)
{
if (labelText != null)
{
labelText.text = val;
}
}
public void OnClick(int obj)
{
_checked = !_checked;
checkImage.enabled = _checked;
OnChecked?.Invoke();
}
}

159
CheatEnabler/UI/MyWindow.cs Normal file
View File

@@ -0,0 +1,159 @@
using HarmonyLib;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace CheatEnabler.UI;
// MyWindowManager modified from LSTM: https://github.com/hetima/DSP_LSTM/blob/main/LSTM/MyWindowCtl.cs
public static class MyWindowManager
{
private static readonly List<ManualBehaviour> Windows = new(4);
private static bool _inited = false;
public static T CreateWindow<T>(string name, string title = "") where T : Component
{
var srcWin = UIRoot.instance.uiGame.tankWindow;
var src = srcWin.gameObject;
var go = Object.Instantiate(src, srcWin.transform.parent);
go.name = name;
go.SetActive(false);
Object.Destroy(go.GetComponent<UITankWindow>());
var win = go.AddComponent<T>() as ManualBehaviour;
if (win == null)
return null;
//shadow
for (var i = 0; i < go.transform.childCount; i++)
{
var child = go.transform.GetChild(i).gameObject;
if (child.name == "panel-bg")
{
var btn = child.GetComponentInChildren<Button>();
//close-btn
if (btn != null)
{
btn.onClick.AddListener(win._Close);
}
else
{
}
}
else if (child.name != "shadow" && child.name != "panel-bg")
{
Object.Destroy(child);
}
}
SetTitle(win, title);
win._Create();
if (_inited)
{
win._Init(win.data);
}
Windows.Add(win);
return win as T;
}
public static void SetTitle(ManualBehaviour win, string title)
{
var txt = GetTitleText(win);
if (txt)
{
txt.text = title;
}
}
public static Text GetTitleText(ManualBehaviour win)
{
return win.gameObject.transform.Find("panel-bg/title-text")?.gameObject.GetComponent<Text>();
}
public static RectTransform GetRectTransform(ManualBehaviour win)
{
return win.GetComponent<RectTransform>();
}
/*
public static void SetRect(ManualBehaviour win, RectTransform rect)
{
var rectTransform = win.GetComponent<RectTransform>();
//rectTransform.position =
//rectTransform.sizeDelta = rect;
}
*/
public static void OpenWindow(ManualBehaviour win)
{
win._Open();
win.transform.SetAsLastSibling();
}
public static void CloseWindow(ManualBehaviour win)
{
win._Close();
}
public static class Patch
{
/*
//_Create -> _Init
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "_OnCreate")]
public static void UIGame__OnCreate_Postfix()
{
}
*/
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "_OnDestroy")]
public static void UIGame__OnDestroy_Postfix()
{
foreach (var win in Windows)
{
win._Destroy();
}
Windows.Clear();
}
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "_OnInit")]
public static void UIGame__OnInit_Postfix(UIGame __instance)
{
foreach (var win in Windows)
{
win._Init(win.data);
}
_inited = true;
}
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "_OnFree")]
public static void UIGame__OnFree_Postfix()
{
foreach (var win in Windows)
{
win._Free();
}
}
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "_OnUpdate")]
public static void UIGame__OnUpdate_Postfix()
{
if (GameMain.isPaused || !GameMain.isRunning)
{
return;
}
foreach (var win in Windows)
{
win._Update();
}
}
[HarmonyPostfix, HarmonyPatch(typeof(UIGame), "ShutAllFunctionWindow")]
public static void UIGame_ShutAllFunctionWindow_Postfix()
{
foreach (var win in Windows)
{
win._Close();
}
}
}
}