using Duckov.UI; using Duckov.Utilities; using ItemStatsSystem; using TMPro; using UnityEngine; // 物品价值显示类 // 用于在物品悬停UI中显示物品的价值 namespace test { /// /// test模组的主要行为类 /// 继承自Duckov.Modding.ModBehaviour,用于在游戏UI中显示物品价值 /// public class ModBehaviour : Duckov.Modding.ModBehaviour { private TextMeshProUGUI? _text = null; private TextMeshProUGUI Text { get { // 如果文本组件尚未创建,则实例化一个新的 if (_text == null) { // 使用游戏UI样式模板创建文本组件 _text = Instantiate(GameplayDataSettings.UIStyle.TemplateTextUGUI); } return _text; } } /// /// 模组初始化时调用,类似于构造函数 /// 在此记录模组加载日志 /// void Awake() { // 在控制台输出模组加载成功的日志信息 Debug.Log("DisplayItemValue Loaded!!!"); } /// /// 模组销毁时调用,用于清理资源 /// 确保创建的文本组件被正确销毁,避免内存泄漏 /// void OnDestroy() { // 检查文本组件是否存在 if (_text != null) // 销毁文本组件以释放资源 Destroy(_text); } void OnEnable() { // 注册物品悬停UI设置事件的监听器 ItemHoveringUI.onSetupItem += OnSetupItemHoveringUI; } /// /// 模组禁用时调用,取消事件监听器 /// 取消订阅事件,防止在模组禁用后仍然响应事件 /// void OnDisable() { // 取消注册物品悬停UI设置事件的监听器 ItemHoveringUI.onSetupItem -= OnSetupItemHoveringUI; } private void OnSetupItemHoveringUI(ItemHoveringUI uiInstance, Item item) { if (item == null) { Text.gameObject.SetActive(false); return; } Text.gameObject.SetActive(true); Text.transform.SetParent(uiInstance.LayoutParent); Text.transform.localScale = Vector3.one; Text.transform.SetSiblingIndex(1); Text.text = $"${item.GetTotalRawValue() / 2}"; Text.fontSize = 20f; Text.color = Color.green; } } }