using TMPro; using UnityEngine; using UnityEngine.UI; namespace Cryville.Crtr.Browsing.UI { internal class BrowserItemTile : BrowserItem { #pragma warning disable IDE0044 [SerializeField] private Sprite m_iconPlaceholder; #pragma warning restore IDE0044 private bool _dir; [SerializeField] Image m_icon; [SerializeField] TMP_Text m_title; [SerializeField] TMP_Text m_desc; #pragma warning disable IDE0051 void Awake() { } void OnDestroy() { if (meta.Icon != null) meta.Icon.Cancel(); if (m_icon.sprite != null && m_icon.sprite != m_iconPlaceholder) { Destroy(m_icon.sprite.texture); Destroy(m_icon.sprite); } } #pragma warning restore IDE0051 internal override void Load(int id, ResourceItemMeta item) { OnDestroy(); base.Load(id, item); _dir = meta.IsDirectory; m_icon.sprite = m_iconPlaceholder; if (meta.Icon != null) meta.Icon.Destination = DisplayCover; m_title.text = meta.Name; m_desc.text = string.Format("{0}\n{1}", meta.DescriptionMain, meta.DescriptionSub); } private void DisplayCover(bool succeeded, Texture2D tex) { if (succeeded) { m_icon.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero, 160, 0, SpriteMeshType.FullRect); } } public void OnClick() { if (Id == null) return; var resourceBrowser = GetComponentInParent(); if (_dir) resourceBrowser.OnDirectoryItemClicked(Id.Value); else resourceBrowser.OnObjectItemClicked(Id.Value); } } }