79 lines
3.0 KiB
C#
79 lines
3.0 KiB
C#
|
|
using Gpm.Ui;
|
||
|
|
using TMPro;
|
||
|
|
using UnityEngine;
|
||
|
|
using UnityEngine.EventSystems;
|
||
|
|
using UnityEngine.UI;
|
||
|
|
using UVC.Util;
|
||
|
|
|
||
|
|
namespace UVC.UI.List
|
||
|
|
{
|
||
|
|
public class PrefabGridItem : InfiniteScrollItem, IPointerEnterHandler, IPointerExitHandler
|
||
|
|
{
|
||
|
|
[SerializeField]
|
||
|
|
private Image image;
|
||
|
|
|
||
|
|
[SerializeField]
|
||
|
|
private TextMeshProUGUI text;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// InfiniteScroll에 의해 데이터가 이 아이템에 할당될 때 호출되는 핵심 메서드입니다.
|
||
|
|
/// 스크롤 시 아이템이 재활용될 때마다 새로운 데이터로 이 메서드가 호출되어 UI를 갱신합니다.
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="scrollData">이 아이템에 표시할 데이터입니다. `InfiniteScrollData`를 상속받은 `ComponentListItemData` 객체입니다.</param>
|
||
|
|
/// <example>
|
||
|
|
/// <code>
|
||
|
|
/// // 1. 표시할 데이터를 생성합니다.
|
||
|
|
/// var categoryData = new ComponentListItemData
|
||
|
|
/// {
|
||
|
|
/// isCategory = true,
|
||
|
|
/// categoryName = "전기 설비",
|
||
|
|
/// categoryBadgeCount = 10
|
||
|
|
/// };
|
||
|
|
///
|
||
|
|
/// var generalData = new ComponentListItemData
|
||
|
|
/// {
|
||
|
|
/// isCategory = false,
|
||
|
|
/// generalName = "분전반",
|
||
|
|
/// generalOption = "옵션 A",
|
||
|
|
/// factoryObjectInfo = new FactoryObjectInfo { Id = "some-unique-Id", Name = "분전반" }
|
||
|
|
/// };
|
||
|
|
///
|
||
|
|
/// // 2. 생성한 데이터를 InfiniteScroll에 추가합니다.
|
||
|
|
/// // infiniteScroll은 InfiniteScroll 컴포넌트의 인스턴스입니다.
|
||
|
|
/// infiniteScroll.InsertData(categoryData);
|
||
|
|
/// infiniteScroll.InsertData(generalData);
|
||
|
|
///
|
||
|
|
/// // 위 코드가 실행되면, InfiniteScroll은 각 데이터에 맞는 ComponentListItem을 생성(또는 재활용)하고,
|
||
|
|
/// // 이 UpdateData 메서드를 호출하여 UI를 데이터에 맞게 설정합니다.
|
||
|
|
/// </code>
|
||
|
|
/// </example>
|
||
|
|
public override async void UpdateData(InfiniteScrollData scrollData)
|
||
|
|
{
|
||
|
|
// 1. 부모 클래스의 UpdateData를 호출하여 기본 초기화 작업을 수행합니다.
|
||
|
|
// 이 과정에서 this.scrollData에 매개변수로 받은 scrollData가 할당됩니다.
|
||
|
|
base.UpdateData(scrollData);
|
||
|
|
|
||
|
|
PrefabGridItemData data = (PrefabGridItemData)scrollData;
|
||
|
|
|
||
|
|
text.text = data.ItemName;
|
||
|
|
image.sprite = await ResourceManager.LoadOnlyAsync<Sprite>(data.ImagePrefabPath);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void OnClick()
|
||
|
|
{
|
||
|
|
PrefabGridItemData data = (PrefabGridItemData)scrollData;
|
||
|
|
data.OnClickAction?.Invoke(data);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void OnPointerEnter(PointerEventData eventData)
|
||
|
|
{
|
||
|
|
CursorManager.Instance.SetCursor(CursorType.HandPoint);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void OnPointerExit(PointerEventData eventData)
|
||
|
|
{
|
||
|
|
CursorManager.Instance.SetCursor(CursorType.Default);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|