// Filename : NPCShopItemPanel.cs // Creator : Converted from C++ EC_Shop // Date : 2024 using UnityEngine; using UnityEngine.UI; using TMPro; using System.Collections; using PerfectWorld.Scripts.Shop; using BrewMonster.Scripts.Managers; public class NPCShopItemPanel : MonoBehaviour { [Header("UI Components")] public TextMeshProUGUI itemNameText; public TextMeshProUGUI itemPriceText; public Image itemIconImage; private GShopItem itemData; private Coroutine iconLoadCoroutine; public void SetupItem(GShopItem item) { itemData = item; UpdateDisplay(); } void UpdateDisplay() { if (itemData.id == 0) return; // Set item name if (itemNameText != null) itemNameText.text = itemData.name; // Set price (use first available price) uint price = 0; if (itemData.buy != null && itemData.buy.Length > 0) { for (int i = 0; i < itemData.buy.Length; i++) { if (itemData.buy[i].price > 0) { price = itemData.buy[i].price; break; } } } if (itemPriceText != null) itemPriceText.text = price > 0 ? price.ToString() : "N/A"; // Load icon - use coroutine to ensure UI is ready if (itemIconImage != null) { // Stop any existing icon load coroutine if (iconLoadCoroutine != null) { StopCoroutine(iconLoadCoroutine); } // Start new icon load coroutine iconLoadCoroutine = StartCoroutine(LoadItemIconCoroutine(itemIconImage, (int)itemData.id)); } } IEnumerator LoadItemIconCoroutine(Image iconImage, int itemId) { // Wait one frame to ensure UI is fully initialized yield return null; LoadItemIcon(iconImage, itemId); } void LoadItemIcon(Image iconImage, int itemId) { if (itemId <= 0 || iconImage == null) return; // Ensure the Image component is enabled and properly configured iconImage.enabled = true; iconImage.preserveAspect = true; iconImage.type = Image.Type.Simple; // Use the existing icon loading system from EC_IvtrItemUtils Sprite iconSprite = EC_IvtrItemUtils.Instance.ResolveItemIconSprite(itemId); if (iconSprite != null) { iconImage.sprite = iconSprite; iconImage.color = Color.white; } else { iconImage.sprite = null; } } void OnDestroy() { if (iconLoadCoroutine != null) { StopCoroutine(iconLoadCoroutine); } } }