BaseItem.cs 1.65 KB
using System;
using UnityEngine;
using UnityEngine.EventSystems;


public abstract class BaseItem<T> : MonoBehaviour, IPointerClickHandler where T : struct
{
    /// <summary>
    /// Item保存得数据
    /// </summary>
    private T itemData;

    /// <summary>
    /// 是否是选中状态
    /// </summary>
    protected bool isSelect;

    /// <summary>
    /// 获取数据
    /// </summary>
    /// <returns></returns>
    public T ItemData()
    {
        return itemData;
    }

    public Action<BaseItem<T>> OnItemClick;

    /// <summary>
    /// 绑定每个item的数据
    /// </summary>
    /// <param name="data"></param>
    public void SetupData(T data)
    {
        itemData = data;
        UpdateItem();
    }

    /// <summary>
    /// 重写更新item内容
    /// </summary>
    protected virtual void UpdateItem()
    {
    }

    /// <summary>
    /// 选中状态更新
    /// </summary>
    /// <param name="selected"></param>
    public virtual void SetSelected(bool selected)
    {
        isSelect = selected;
    }

    /// <summary>
    /// 设置Item位置
    /// </summary>
    /// <param name="vec"></param>
    public virtual void SetPosition(Vector2 vec)
    {
        transform.localPosition = vec;
    }

    /// <summary>
    /// 设置Item是否激活
    /// </summary>
    /// <param name="isActive"></param>
    protected virtual void SetItemActive(bool isActive)
    {
        gameObject.SetActive(isActive);
    }

    /// <summary>
    /// Unity的点击事件
    /// </summary>
    /// <param name="eventData"></param>
    public virtual void OnPointerClick(PointerEventData eventData)
    {
        OnItemClick?.Invoke(this);
    }
}