83 lines
2.2 KiB
C#
83 lines
2.2 KiB
C#
using Cryville.Common;
|
|
using System.Linq;
|
|
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;
|
|
|
|
AsyncDelivery<Texture2D> _image;
|
|
|
|
void OnDestroy() {
|
|
DestroyDynamicResources();
|
|
}
|
|
|
|
public void Load(IResourceMeta meta) {
|
|
m_placeholder.SetActive(false);
|
|
m_content.SetActive(true);
|
|
DestroyDynamicResources();
|
|
m_cover.sprite = m_coverPlaceholder;
|
|
|
|
_image = meta.EnumerateProperties<AsyncDelivery<Texture2D>>().FirstOrDefault().Value;
|
|
if (_image != null) _image.Destination = DisplayCover;
|
|
|
|
var nameProp = meta.Properties.FirstOrDefault(prop => prop.Name == "Name");
|
|
if (nameProp != null) {
|
|
var names = nameProp.EnumerateProperty(true).GetEnumerator();
|
|
if (names.MoveNext()) {
|
|
m_title.text = names.Current.Value.ToString();
|
|
if (names.MoveNext()) {
|
|
m_title.text += "\n" + names.Current.Value.ToString();
|
|
}
|
|
}
|
|
else {
|
|
m_title.text = "";
|
|
}
|
|
|
|
m_desc.text = "";
|
|
var basicProps = meta.EnumerateBasicProperties().Where(prop => prop.Key != "Name").GetEnumerator();
|
|
for (int i = 0; i < 4 && basicProps.MoveNext(); i++) {
|
|
var cur = basicProps.Current;
|
|
var str = string.Format("{0}: {1}", cur.Key, cur.Value);
|
|
if (i == 0) m_desc.text = str;
|
|
else m_desc.text += "\n" + str;
|
|
}
|
|
}
|
|
else {
|
|
m_title.text = "<color=#ff0000>Invalid resource</color>";
|
|
m_desc.text = "";
|
|
}
|
|
}
|
|
void DisplayCover(bool succeeded, Texture2D tex) {
|
|
if (!succeeded) return;
|
|
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() {
|
|
_image?.Cancel();
|
|
if (m_cover.sprite != null && m_cover.sprite != m_coverPlaceholder) {
|
|
Destroy(m_cover.sprite.texture);
|
|
Destroy(m_cover.sprite);
|
|
}
|
|
}
|
|
}
|
|
}
|