From 312d03f3e5bdb1e4a17e58533d8b3a602e0564a8 Mon Sep 17 00:00:00 2001 From: VuNgocHaiC7 Date: Wed, 21 Jan 2026 16:40:25 +0700 Subject: [PATCH] update ui DlgInstall.prefab --- .../UI/DialogScriptTableObject.asset | 2 + .../Scripts/UI/Dialogs/DlgInstall.cs | 231 + .../Scripts/UI/Dialogs/DlgInstall.cs.meta | 2 + .../PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs | 29 +- Assets/PerfectWorld/UI/DlgProduce.prefab | 5 +- Assets/Prefabs/UI/DlgInstall.prefab | 8417 +++++++++++++++++ Assets/Prefabs/UI/DlgInstall.prefab.meta | 7 + 7 files changed, 8688 insertions(+), 5 deletions(-) create mode 100644 Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs create mode 100644 Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs.meta create mode 100644 Assets/Prefabs/UI/DlgInstall.prefab create mode 100644 Assets/Prefabs/UI/DlgInstall.prefab.meta diff --git a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset index 4f0fadf383..3a4fb1f552 100644 --- a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset +++ b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset @@ -31,3 +31,5 @@ MonoBehaviour: prefab: {fileID: 5750242998044155948, guid: ecf0d8daf08db6f4a8d94a4bb07847ec, type: 3} - id: Win_Inventory prefab: {fileID: 5910006447059157136, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3} + - id: Win_Enchase + prefab: {fileID: 5636724581774400035, guid: de6ac6f2630425044a55299c703670f1, type: 3} diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs new file mode 100644 index 0000000000..258f439dff --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs @@ -0,0 +1,231 @@ +using BrewMonster.Network; +using BrewMonster.Scripts.Managers; +using BrewMonster.Scripts.Task; +using BrewMonster.UI; +using CSNetwork; +using ModelRenderer.Scripts.Common; +using PerfectWorld.Scripts.Managers; +using PerfectWorld.Scripts.Task; +using System; +using System.Collections.Generic; +using System.Text; +using TMPro; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace BrewMonster +{ + public class DlgInstall : AUIDialog + { + [Header("Slot First")] + [SerializeField] private Transform m_SlotFirstParent; + [SerializeField] private TextMeshProUGUI m_TxtFirstName; + + [Header("Slot Second")] + [SerializeField] private Transform m_SlotSecondlParent; + [SerializeField] private TextMeshProUGUI m_TxtSecondName; + + [Header("Buttons and Money")] + [SerializeField] private TextMeshProUGUI m_TxtMoney; + [SerializeField] private Button m_BtnInstall; + [SerializeField] private Button m_BtnCancel; + + [Header("Item Info Panel")] + public Transform itemInfoRoot; + public TextMeshProUGUI infoNameText; + public TextMeshProUGUI infoDescText; + public TextMeshProUGUI infoExtraText; + + private EC_IvtrItem m_SelectedEquip; + private EC_IvtrItem m_SelectedMaterial; + + public override void Awake() + { + base.Awake(); + RegisterDrop(m_SlotFirstParent, OnDropEquip); + RegisterDrop(m_SlotSecondlParent, OnDropMaterial); + RegisterClick(m_SlotFirstParent, OnClickEquipSlot); + RegisterClick(m_SlotSecondlParent, OnClickMaterialSlot); + + // Hide item info panel initially + if (itemInfoRoot != null) + itemInfoRoot.gameObject.SetActive(false); + } + + public void OnpenInstall(uint npcId) + { + + } + + public void CloseInstall() + { + gameObject.SetActive(false); + } + + private void RegisterDrop(Transform target, Action callback) + { + var trigger = target.GetComponent(); + if (trigger == null) + trigger = target.gameObject.AddComponent(); + + trigger.triggers.Clear(); + + var entry = new EventTrigger.Entry + { + eventID = EventTriggerType.Drop + }; + entry.callback.AddListener((data) => + { + callback((PointerEventData)data); + }); + + trigger.triggers.Add(entry); + } + + private void RegisterClick(Transform target, Action callback) + { + var trigger = target.GetComponent(); + if (trigger == null) + trigger = target.gameObject.AddComponent(); + + var entry = new EventTrigger.Entry + { + eventID = EventTriggerType.PointerClick + }; + entry.callback.AddListener((data) => + { + callback((PointerEventData)data); + }); + + trigger.triggers.Add(entry); + } + + private void OnClickEquipSlot(PointerEventData eventData) + { + if (m_SelectedEquip != null) + { + ShowItemInfo(m_SelectedEquip); + } + } + + private void OnClickMaterialSlot(PointerEventData eventData) + { + if (m_SelectedMaterial != null) + { + ShowItemInfo(m_SelectedMaterial); + } + } + + private void ShowItemInfo(EC_IvtrItem item) + { + if (item == null || itemInfoRoot == null) + return; + + itemInfoRoot.gameObject.SetActive(true); + + if (infoDescText != null) + { + string rawDesc = item.GetDesc(); + + // Process the description: replace \\r with newlines and handle color codes + string processedDesc = EC_Utility.ProcessColorCodes(new StringBuilder(rawDesc.Replace("\\r", "\n"))); + + infoDescText.text = processedDesc; + + Debug.Log($"[Install] Raw desc: {rawDesc}"); + Debug.Log($"[Install] Processed desc: {processedDesc}"); + } + + // Force rebuild layout to ensure proper sizing + ForceRefreshItemInfoLayout(); + + Debug.Log($"[Install] Showing info for item: {item.GetName()}"); + } + + private void ForceRefreshItemInfoLayout() + { + if (itemInfoRoot == null) + return; + + var rt = itemInfoRoot.GetComponent(); + if (rt != null) + { + LayoutRebuilder.ForceRebuildLayoutImmediate(rt); + } + } + + private void HideItemInfo() + { + if (itemInfoRoot != null) + itemInfoRoot.gameObject.SetActive(false); + } + + private EC_IvtrItem GetItemFromDrag(PointerEventData eventData) + { + if (eventData.pointerDrag == null) + return null; + + var btn = eventData.pointerDrag.GetComponent