Files
tcg-client/Assets/TcgEngine/Scripts/Tasks/TaskItem.cs
2025-09-10 17:34:28 +08:00

86 lines
2.4 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 reward_icon;
public Image taskEnd_img;
private PlayerTask playerTask;
private TaskData taskConfig;
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);
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;
}
private void RewardColl(Sprite icon)
{
if (reward_icon != null)
{
reward_icon.sprite = icon;
}
}
}
}