Files
2025-09-12 11:39:17 +08:00

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;
}
}
}