91 lines
2.8 KiB
C#
91 lines
2.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TcgEngine.Gameplay;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace TcgEngine.UI
|
|
{
|
|
public class TaskItem : UIPanel
|
|
{
|
|
public string taskID;
|
|
|
|
public Text taskName_text;
|
|
public Text teskDesc_text;
|
|
public Slider progressBar_slider;
|
|
public Text progressBar_text;
|
|
|
|
public Button reward_button;
|
|
|
|
public Image taskEnd_img;
|
|
|
|
private PlayerTask playerTask;
|
|
private TaskData taskConfig;
|
|
|
|
public GameObject rewardItem;
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
Show();
|
|
taskEnd_img.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void SetTask(TaskData config, PlayerTask task)
|
|
{
|
|
taskID = config.id;
|
|
|
|
taskConfig = config;
|
|
playerTask = task;
|
|
|
|
taskName_text.text = taskConfig.name;
|
|
teskDesc_text.text = taskConfig.desc;
|
|
|
|
progressBar_slider.maxValue = config.value1;
|
|
progressBar_slider.value = task.progress;
|
|
progressBar_text.text = task.progress + "/" + taskConfig.value1;
|
|
progressBar_slider.interactable = false; // 禁用交互性
|
|
|
|
reward_button.interactable = task.status == TaskStatus.Completed;
|
|
reward_button.onClick.RemoveAllListeners();
|
|
reward_button.onClick.AddListener(OnClickReward);
|
|
|
|
// 奖品
|
|
for (int i = 0; i < config.rewardTypes.Length; i++)
|
|
{
|
|
TaskRewardType rewardType = config.rewardTypes[i];
|
|
int rewardNum = (config.rewardNums != null && i < config.rewardNums.Length)
|
|
? config.rewardNums[i] : 1; // 没配数量就默认为1
|
|
|
|
GameObject go = Instantiate(rewardItem, reward_button.transform);
|
|
var reward = go.GetComponent<TaskReward>();
|
|
reward.SetPrize(rewardType, rewardNum, reward_button.interactable); // 改成传两个参数
|
|
}
|
|
|
|
if (task.status == TaskStatus.Expired || task.status == TaskStatus.Claimed)
|
|
{
|
|
taskEnd_img.gameObject.SetActive(true);
|
|
}
|
|
|
|
|
|
RefreshStatus();
|
|
|
|
}
|
|
private void OnClickReward()
|
|
{
|
|
if (playerTask != null && playerTask.status == TaskStatus.Completed)
|
|
{
|
|
TaskManager.Instance.ClaimTaskReward(playerTask);
|
|
RefreshStatus();
|
|
}
|
|
}
|
|
private void RefreshStatus()
|
|
{
|
|
if (playerTask == null) return;
|
|
|
|
progressBar_slider.value = playerTask.progress;
|
|
progressBar_text.text = playerTask.progress + "/" + taskConfig.value1;
|
|
}
|
|
}
|
|
} |