Files
tcg-client/Assets/TcgEngine/Scripts/GameClient/GameClientTaskIntegration.cs

104 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using TcgEngine.Gameplay;
using TcgEngine.UI;
using System.Linq;
namespace TcgEngine.Client
{
/// <summary>
/// 游戏客户端任务集成,用于将任务系统集成到游戏客户端中
/// </summary>
public class GameClientTaskIntegration : MonoBehaviour
{
[Header("所有任务")]
public List<PlayerTask> tasks = new List<PlayerTask>();
[Header("活跃任务")]
public List<PlayerTask> activeTasks = new List<PlayerTask>();
[Header("已完成任务")]
public List<PlayerTask> completedTasks = new List<PlayerTask>();
private GameClient client;
private TaskPanel taskPanel;
private void Awake()
{
taskPanel = GetComponent<TaskPanel>();
if (taskPanel == null)
{
taskPanel = FindObjectOfType<TaskPanel>();
}
}
private void OnEnable()
{
client = GameClient.Get();
if (client != null)
client.onConnectServer += OnConnectToServer;
if (TaskManager.Instance != null)
{
TaskManager.Instance.refreshTaskUI += OnRefreshTaskPanel;
}
}
private void OnDisable()
{
if (client != null)
client.onConnectServer -= OnConnectToServer;
if (TaskManager.Instance != null)
TaskManager.Instance.refreshTaskUI -= OnRefreshTaskPanel;
}
private void OnConnectToServer()
{
// 玩家登录时检查任务
TaskManager taskManager = TaskManager.Instance;
if (taskManager != null)
{
taskManager.OnPlayerLogin();
OnRefreshTaskPanel(TaskManager.Instance.GetAllTasks());
}
}
private void OnRefreshTaskPanel(List<PlayerTask> tasksList)
{
TaskManager taskManager = TaskManager.Instance;
if (taskManager == null || taskPanel == null)
return;
tasks = taskManager.GetAllTasks();
activeTasks = taskManager.GetActiveTasks();
completedTasks = taskManager.GetCompletedTasks();
// 用 tasks 排序
var sortedTasks = tasks
.OrderBy(t => GetTaskSortOrder(t.status))
.ThenBy(t => t.assignedTime)
.ToList();
taskPanel.allTaskData = taskManager.taskConfigs;
taskPanel.RefreshTasks(sortedTasks);
}
private int GetTaskSortOrder(TaskStatus status)
{
switch (status)
{
case TaskStatus.Completed: return 0; // 第一优先
case TaskStatus.Active: return 1;
case TaskStatus.Claimed: return 2;
case TaskStatus.Expired: return 3;
default: return 4;
}
}
}
}