145 lines
3.7 KiB
C#
145 lines
3.7 KiB
C#
using cfg;
|
|
using Gameplay;
|
|
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;
|
|
public GameObject[] itemL;
|
|
|
|
private TaskInfo _taskInfo;
|
|
|
|
public override void OnAwake()
|
|
{
|
|
|
|
}
|
|
|
|
public override void SetData(object data)
|
|
{
|
|
_taskInfo = data as TaskInfo;
|
|
|
|
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();
|
|
_RefreshRewards();
|
|
_RefreshButtons();
|
|
}
|
|
|
|
private void _RefreshBg()
|
|
{
|
|
var color = imgBg.color;
|
|
var alpha = _taskInfo.Status == TaskState.Claimed ? (127f/255) : (210f/255);
|
|
imgBg.color = new Color(color.r, color.b, color.g, alpha);
|
|
}
|
|
|
|
private void _RefreshTaskContent()
|
|
{
|
|
var desc = CommonUtils.GetLocalizeText(_taskInfo.Cfg.Describe);
|
|
txtTaskDesc.text = desc;
|
|
|
|
TaskManager.Instance.SetTaskRequestCount(_taskInfo, out var curCount, out var maxCount);
|
|
if (curCount > maxCount)
|
|
{
|
|
curCount = maxCount;
|
|
}
|
|
txtTaskProcess.text = curCount + "/" + maxCount;
|
|
|
|
var process = (float)curCount / maxCount;
|
|
if (process > 0 && process < 0.05)
|
|
{
|
|
process = 0.05f;
|
|
}
|
|
imgTaskProcess.fillAmount = process;
|
|
|
|
if (_taskInfo.Status == TaskState.Claimed)
|
|
{
|
|
txtTaskDesc.color = Color.black;
|
|
txtTaskProcess.color = Color.black;
|
|
}
|
|
else
|
|
{
|
|
txtTaskDesc.color = Color.white;
|
|
txtTaskProcess.color = Color.white;
|
|
}
|
|
}
|
|
|
|
private async void _RefreshRewards()
|
|
{
|
|
var itemIDList = _taskInfo.ItemList;
|
|
for (int i = 0; i < itemIDList.Count; i++)
|
|
{
|
|
itemL[i].transform.ClearChilds();
|
|
var rewardItem = itemIDList[i];
|
|
var count = rewardItem.Count > 0 ? rewardItem.Count : 0;
|
|
var itemObj = new ItemObj(rewardItem.ID, itemL[i], ItemObj.UIType.cultivate, count);
|
|
await itemObj.Init();
|
|
itemObj.SetScale(0.7f);
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
private void _OnClickGoto()
|
|
{
|
|
if (_taskInfo.Status == TaskState.Uncompleted)
|
|
{
|
|
var jumpToType = _taskInfo.Cfg.JumpFunc;
|
|
if (jumpToType == JumpFuncType.None)
|
|
{
|
|
return;
|
|
}
|
|
|
|
JumpToManager.JumpFunc(jumpToType);
|
|
}
|
|
}
|
|
} |