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