using BrewMonster.Assets.PerfectWorld.Scripts.UI; using BrewMonster.Common; using BrewMonster.Managers; using BrewMonster.Scripts; using BrewMonster.Scripts.Managers; using CSNetwork.GPDataType; using Cysharp.Threading.Tasks.Triggers; using PerfectWorld.Scripts.Managers; using System; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using static BrewMonster.Scripts.EC_Inventory; namespace BrewMonster.UI { public class DlgPetHatch : AUIDialog { [Header("Component")] [SerializeField] private TextMeshProUGUI m_pTxtName; [SerializeField] private TextMeshProUGUI m_pTxtGold; [SerializeField] private Image m_pImg_Item; [SerializeField] private GameObject m_pTxtBindTip; [Header("Buttons")] [SerializeField] private Button m_btnConfirm; [SerializeField] private Button m_btnCancel; [SerializeField] private Button m_btnClose; [SerializeField] private Button m_btnUseItem; [Header("Defautl Icon")] [SerializeField] private Sprite m_defaultIcon; [SerializeField] private GameObject m_itemInfo; private int m_nSlot = 1; private EC_IvtrPetEgg m_pCurrentEgg = null; private float m_doubleClickTime = 1f; public override void Awake() { base.Awake(); RegisterClick(m_pImg_Item.transform, OnClickEggSlot); } public override void OnEnable() { base.OnEnable(); ClearEgg(); if (m_btnConfirm != null) m_btnConfirm.onClick.AddListener(OnCommandConfirm); if (m_btnCancel != null) m_btnCancel.onClick.AddListener(OnCommandCancel); if (m_btnClose != null) m_btnClose.onClick.AddListener(OnCommandCancel); if (m_btnUseItem != null) m_btnUseItem.onClick.AddListener(OnClickUseItem); } public override void OnDisable() { base.OnDisable(); RestoreInventoryColor(); if (m_btnConfirm != null) m_btnConfirm.onClick.RemoveListener(OnCommandConfirm); if (m_btnCancel != null) m_btnCancel.onClick.RemoveListener(OnCommandCancel); if (m_btnClose != null) m_btnClose.onClick.RemoveListener(OnCommandCancel); if (m_btnUseItem != null) m_btnUseItem.onClick.RemoveListener(OnClickUseItem); } public override void Show(bool value) { base.Show(value); if (value) { OnShowDialog(); } } private void OnShowDialog() { ClearEgg(); } private void SetEggInternal(EC_IvtrPetEgg petEgg, int slotIndex) { if (petEgg == null) return; if (m_nSlot >= 0) { var previousBtn = FindInventoryButtonBySlot(m_nSlot); SetInventorySlotGray(previousBtn, false); } if (m_pCurrentEgg != null) m_pCurrentEgg.Freeze(false); m_pCurrentEgg = petEgg; m_nSlot = slotIndex; petEgg.Freeze(true); SetDataPtr(petEgg, ""); UpdateEggUI(petEgg); var btn = FindInventoryButtonBySlot(slotIndex); SetInventorySlotGray(btn, true); } public void SetEgg(EC_IvtrItem pItem, int nSlot) { if (!(pItem is EC_IvtrPetEgg petEgg)) return; SetEggInternal((EC_IvtrPetEgg)pItem, nSlot); } private void RegisterClick(Transform target, Action callback) { if (target == null) return; var trigger = target.GetComponent(); if (trigger == null) trigger = target.gameObject.AddComponent(); var existingClick = trigger.triggers.Find(e => e.eventID == EventTriggerType.PointerClick); if (existingClick != null) trigger.triggers.Remove(existingClick); var entry = new EventTrigger.Entry { eventID = EventTriggerType.PointerClick }; entry.callback.AddListener((data) => { callback((PointerEventData)data); }); trigger.triggers.Add(entry); } private void OnClickEggSlot(PointerEventData eventData) { if (m_pCurrentEgg != null) { ReturnItemToInventory(m_nSlot); ClearEgg(); } } private void OnDropEgg(PointerEventData eventData) { if (eventData.pointerDrag == null) return; var btn = eventData.pointerDrag.GetComponent