NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/GenericItem.cs

295 lines
7.2 KiB
C#

using cfg.ActorCfg;
using Framework;
using Gameplay.Net;
using PhxhSDK;
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 通用道具
/// </summary>
public class GenericItem : UIGameObjectWrapper
{
/// <summary>
/// 置灰的灰度
/// </summary>
private const float GREY = 0.5f;
/// <summary>
/// 正常颜色
/// </summary>
private const float NORMAL = 1f;
#region UI
/// <summary>
/// 道具品质
/// </summary>
private Image imageQuality;
/// <summary>
/// 道具图标
/// </summary>
private Image imageIcon;
/// <summary>
/// 道具数量背景
/// </summary>
private Image imageCount;
/// <summary>
/// 道具数量文本
/// </summary>
private TMP_Text textCount;
/// <summary>
/// 道具按钮
/// </summary>
private Button button;
#endregion
/// <summary>
/// 道具配置
/// </summary>
private DataItem dataItem;
/// <summary>
/// 回调
/// </summary>
private Action callbackAction;
/// <summary>
/// 是否显示道具数量
/// </summary>
public bool IsShowCount
{
set
{
imageCount.gameObject.IsScaleShow(value);
}
}
/// <summary>
/// 是否置灰
/// </summary>
public bool IsGrey
{
set
{
if (value)
{
imageQuality.color = new Color(GREY, GREY, GREY, imageQuality.color.a);
imageIcon.color = new Color(GREY, GREY, GREY, imageIcon.color.a);
imageCount.color = new Color(GREY, GREY, GREY, imageCount.color.a);
textCount.color = new Color(GREY, GREY, GREY, textCount.color.a);
}
else
{
imageQuality.color = new Color(NORMAL, NORMAL, NORMAL, imageQuality.color.a);
imageIcon.color = new Color(NORMAL, NORMAL, NORMAL, imageIcon.color.a);
imageCount.color = new Color(NORMAL, NORMAL, NORMAL, imageCount.color.a);
textCount.color = new Color(NORMAL, NORMAL, NORMAL, textCount.color.a);
}
}
}
/// <summary>
/// 是否开启按钮
/// </summary>
public bool IsEnableButton
{
set { button.enabled = value; }
}
/// <summary>
/// 根据GameObject构造
/// </summary>
/// <param name="root"></param>
public GenericItem(GameObject root, Action callback = null) : base(root, false)
{
Construct(callback);
}
/// <summary>
/// 根据GameObject克隆并构造
/// </summary>
/// <param name="root"></param>
/// <param name="i"></param>
public GenericItem(GameObject root, int i, Action callback = null) : base(root, i, false)
{
Construct(callback);
}
private void Construct(Action callback)
{
callbackAction = callback;
imageQuality = GetComponent<Image>("BaseItem/ItemQuality");
imageIcon = GetComponent<Image>("BaseItem/ItemIcon");
imageCount = GetComponent<Image>("BaseItem/ImageCount");
textCount = GetComponent<TMP_Text>("BaseItem/ImageCount/TextCount");
button = GetComponent<Button>("BaseItem");
IsShowCount = false;
IsGrey = false;
IsEnableButton = callbackAction != null;
BindButton(button, OnClick);
}
/// <summary>
/// 设置道具数据
/// </summary>
/// <param name="data"></param>
/// <param name="count"></param>
public virtual async void SetInfo(DataItem data, int count = 0)
{
dataItem = data;
if (dataItem == null)
{
DebugUtil.LogError("空数据");
return;
}
SetCount(count);
imageIcon.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(dataItem.IconPath);
IsScaleShow = true;
}
public virtual async void SetInfo(string iconPath, int count = 0, Action callback = null)
{
SetCount(count);
SetCallback(callback);
imageIcon.sprite = await AssetManager.Instance.LoadAssetAsync<Sprite>(iconPath);
IsScaleShow = true;
}
/// <summary>
/// 根据道具id设置道具数据
/// </summary>
/// <param name="itemID"></param>
/// <param name="count"></param>
public virtual void SetInfo(int itemID, int count = 0)
{
DataItem data = TableManager.Instance.Tables.Item.Get(itemID);
if (data == null)
{
DebugUtil.LogError($"道具id错误,错误道具id{itemID}");
return;
}
SetInfo(data, count);
}
/// <summary>
/// 设置回调
/// </summary>
public void SetCallback(Action callback)
{
callbackAction = callback;
IsEnableButton = callbackAction != null;
}
/// <summary>
/// 设置道具数量
/// </summary>
public void SetCount(int count)
{
if (count <= 0)
{
IsShowCount = false;
return;
}
textCount.text = count.ToString();
IsShowCount = true;
}
private void OnClick()
{
callbackAction?.Invoke();
}
}
/// <summary>
/// 通用道具,通关奖励
/// </summary>
public class GenericItem_PassReward : GenericItem
{
/// <summary>
/// 已获取状态
/// </summary>
private GameObject goGet;
/// <summary>
/// 首次通关状态
/// </summary>
private GameObject goFirstPass;
/// <summary>
/// 重复通关状态
/// </summary>
private GameObject goNormalPass;
/// <summary>
/// 是否已经获取
/// </summary>
public bool IsGet
{
set
{
goGet.IsScaleShow(value);
IsGrey = value;
}
}
/// <summary>
/// 是否首次通关
/// </summary>
public bool IsFirstPass
{
set { goFirstPass.IsScaleShow(value); }
}
/// <summary>
/// 是否重复通关
/// </summary>
public bool IsNormalPass
{
set { goNormalPass.IsScaleShow(value); }
}
public GenericItem_PassReward(GameObject root, Action callback = null) : base(root, callback)
{
Construct();
}
public GenericItem_PassReward(GameObject root, int i, Action callback = null) : base(root, i, callback)
{
Construct();
}
private void Construct()
{
goGet = FindObj("BaseItem_PassReward/TextAlreadyGet");
goNormalPass = FindObj("BaseItem_PassReward/LevelNormalPass");
goFirstPass = FindObj("BaseItem_PassReward/LevelFirstPass");
IsGet = false;
IsFirstPass = false;
IsNormalPass = false;
}
/// <summary>
/// 设置奖励道具数据
/// </summary>
/// <param name="rewardItem"></param>
/// <param name="isGet"></param>
/// <param name="rewardType"></param>
public void SetInfo(RewardItem rewardItem, bool isGet = false, ERewardType rewardType = ERewardType.None)
{
IsGet = isGet;
IsFirstPass = rewardType == ERewardType.LevelFirstPassReward;
IsNormalPass = rewardType == ERewardType.LevelNormalPassReward;
SetInfo(rewardItem.Data, rewardItem.Count);
}
}