using Cryville.Common; using System; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Cryville.Crtr.Browsing.UI { public class DetailPanel : MonoBehaviour { [SerializeField] Sprite m_coverPlaceholder; [SerializeField] GameObject m_placeholder; [SerializeField] GameObject m_content; [SerializeField] Image m_cover; [SerializeField] TMP_Text m_title; [SerializeField] TMP_Text m_desc; ChartDetail _data; void OnDestroy() { DestroyDynamicResources(); } public void Load(ChartDetail data) { m_placeholder.SetActive(false); m_content.SetActive(true); DestroyDynamicResources(); _data = data; m_cover.sprite = m_coverPlaceholder; if (data.Cover != null) data.Cover.Destination = DisplayCover; var meta = data.Meta; if (meta != null) { m_title.text = string.Format("{0}\n{1}", meta.song.name, meta.name); m_desc.text = string.Format( "Music artist: {0}\nCharter: {1}\nLength: {2}\nNote Count: {3}", meta.song.author, meta.author, TimeSpan.FromSeconds(meta.length).ToString(3), meta.note_count ); } else { m_title.text = "Invalid resource"; m_desc.text = string.Empty; } } void DisplayCover(bool succeeded, Texture2D tex) { if (succeeded) { m_cover.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero, 160, 0, SpriteMeshType.FullRect); } } public void Clear() { m_placeholder.SetActive(true); m_content.SetActive(false); DestroyDynamicResources(); } void DestroyDynamicResources() { if (_data.Cover != null) _data.Cover.Cancel(); if (m_cover.sprite != null && m_cover.sprite != m_coverPlaceholder) { Destroy(m_cover.sprite.texture); Destroy(m_cover.sprite); } } } }