using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Decentralized { /// /// 放大镜检视显卡时的大图:和香烟一样把物品放大摆在检视台上,正反面各一张,看外观自己判断真假。 /// 游戏没有给 mod 开放检视界面,这里不打补丁,只在检视台(InspectionUIManager.panel)下面挂一个自己的界面, /// 用一个常驻的 MonoBehaviour 每帧看一眼是否正在检视显卡。 /// public sealed class GpuInspectView : MonoBehaviour { private static GpuInspectView instance; private RectTransform root, cardRoot; private Button flip; private TextMeshProUGUI flipText; private GameItem shown; private string shownSig; public static void Ensure() { if (instance != null) return; var go = new GameObject("pd_gpu_inspect_view"); DontDestroyOnLoad(go); instance = go.AddComponent(); } public static void Remove() { if (instance != null) Destroy(instance.gameObject); instance = null; } private void Update() { var m = InspectionUIManager.Instance; var item = m != null && m.panel != null && m.panel.activeSelf ? m.currentInspectingItem : null; if (item == null || !Items.IsGpu(item)) { if (root != null && root.gameObject.activeSelf) root.gameObject.SetActive(false); shown = null; return; } Log.Guard("显卡检视大图", () => { if (root == null) Build(m); if (!root.gameObject.activeSelf) root.gameObject.SetActive(true); var keys = new List(); string sig = Items.LookKeys(item, keys) + "|" + string.Join(",", keys); if (item != shown || sig != shownSig) { shown = item; shownSig = sig; Redraw(item); } }); } private void Build(InspectionUIManager m) { root = new GameObject("_PdGpuInspection", typeof(RectTransform)).GetComponent(); root.SetParent(m.panel.transform, false); root.sizeDelta = new Vector2(1920, 1080); root.localPosition = Vector3.zero; cardRoot = new GameObject("Card", typeof(RectTransform)).GetComponent(); cardRoot.SetParent(root, false); cardRoot.localPosition = new Vector3(0, 40, 0); // 翻面按钮:复制鉴定面板里"发送"按钮的外观 var template = m.appraisalPanel.transform.Find("buttonSend"); if (template != null) { var go = Instantiate(template.gameObject, root, false); go.name = "Flip"; go.transform.localPosition = new Vector3(0, -300, 0); flip = go.GetComponent