NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Task/UITaskNode.cs

161 lines
4.2 KiB
C#
Raw Normal View History

2023-12-27 19:42:58 +08:00
using cfg;
using Gameplay;
2024-04-02 13:29:07 +08:00
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UITaskNode: UINode
{
public Image imgBg;
public Image imgRequirement;
public TMP_Text txtTaskDesc;
public TMP_Text txtTaskProcess;
public Image imgTaskProcess;
public Button btnClaim;
public Button btnGoTo;
public Button btnCantGet;
public Button btnClaimed;
2023-12-27 19:42:58 +08:00
public GameObject[] itemL;
2024-04-02 13:29:07 +08:00
public GenericItem[] genericItems;
private TaskInfo _taskInfo;
2023-12-27 19:42:58 +08:00
public override void OnAwake()
{
}
public override void SetData(object data)
{
_taskInfo = data as TaskInfo;
2024-04-02 13:29:07 +08:00
if (genericItems == null)
{
genericItems = new GenericItem[itemL.Length];
for (int i = 0; i < itemL.Length; ++i)
{
genericItems[i] = new GenericItem(itemL[i].transform.Find("GenericItem").gameObject);
}
}
Refresh();
}
public void SetButtons()
{
ClearBind(btnClaim);
ClearBind(btnGoTo);
BindButton(btnClaim, _OnClickClaim);
BindButton(btnGoTo, _OnClickGoto);
}
public void Refresh()
{
if (_taskInfo == null) return;
var cfg = _taskInfo.Cfg;
_RefreshBg();
_RefreshTaskContent();
2023-12-27 19:42:58 +08:00
_RefreshRewards();
_RefreshButtons();
}
private void _RefreshBg()
{
var color = imgBg.color;
2023-12-29 14:50:57 +08:00
var alpha = _taskInfo.Status == TaskState.Claimed ? (127f/255) : (210f/255);
imgBg.color = new Color(color.r, color.b, color.g, alpha);
}
private void _RefreshTaskContent()
{
2024-05-15 15:22:41 +08:00
var cfg = _taskInfo.Cfg;
var desc = CommonUtils.GetLocalizeText(cfg.Describe, cfg.CheckParam1, cfg.CheckParam2, cfg.CheckParam3);
txtTaskDesc.text = desc;
2023-12-27 19:42:58 +08:00
TaskManager.Instance.SetTaskRequestCount(_taskInfo, out var curCount, out var maxCount);
2023-12-29 14:50:57 +08:00
if (curCount > maxCount)
{
curCount = maxCount;
}
2023-12-27 19:42:58 +08:00
txtTaskProcess.text = curCount + "/" + maxCount;
var process = (float)curCount / maxCount;
2024-01-02 19:57:56 +08:00
if (process > 0 && process < 0.05)
{
process = 0.05f;
}
2023-12-27 19:42:58 +08:00
imgTaskProcess.fillAmount = process;
2023-12-29 18:22:22 +08:00
if (_taskInfo.Status == TaskState.Claimed)
{
txtTaskDesc.color = Color.black;
txtTaskProcess.color = Color.black;
}
else
{
txtTaskDesc.color = Color.white;
txtTaskProcess.color = Color.white;
}
}
2023-12-27 19:42:58 +08:00
2024-04-02 13:29:07 +08:00
private void _RefreshRewards()
2023-12-27 19:42:58 +08:00
{
2024-04-02 13:29:07 +08:00
List<RewardItem> itemIDList = _taskInfo.ItemList;
for (int i = 0; i < genericItems.Length; i++)
2023-12-27 19:42:58 +08:00
{
if (i < itemIDList.Count)
{
RewardItem rewardItem = itemIDList[i];
int count = rewardItem.Count > 0 ? rewardItem.Count : 0;
genericItems[i].SetInfo(rewardItem.Data, count);
}
else
{
genericItems[i].IsScaleShow = false;
}
2023-12-27 19:42:58 +08:00
}
}
private void _RefreshButtons()
{
var status = _taskInfo.Status;
btnClaim.gameObject.SetActive(status == TaskState.Available);
btnClaimed.gameObject.SetActive(status == TaskState.Claimed);
if (status == TaskState.Uncompleted)
{
var jumpToType = _taskInfo.Cfg.JumpFunc;
btnCantGet.gameObject.SetActive(jumpToType == JumpFuncType.None);
btnGoTo.gameObject.SetActive(jumpToType != JumpFuncType.None);
}
else
{
btnCantGet.gameObject.SetActive(false);
btnGoTo.gameObject.SetActive(false);
}
}
private void _OnClickClaim()
{
if (_taskInfo.Status == TaskState.Available)
{
TaskManager.Instance.ClaimTaskReward(_taskInfo.TaskID);
AudioManager.Instance.PlayAudio("ui_common_claim");
}
}
private void _OnClickGoto()
{
if (_taskInfo.Status == TaskState.Uncompleted)
{
var jumpToType = _taskInfo.Cfg.JumpFunc;
if (jumpToType == JumpFuncType.None)
{
return;
}
JumpToManager.JumpFunc(jumpToType);
}
}
}