using System; using System.Collections.Generic; using UnityEngine; using TcgEngine.Gameplay; using TcgEngine.UI; using System.Linq; namespace TcgEngine.Client { /// /// 游戏客户端任务集成,用于将任务系统集成到游戏客户端中 /// public class GameClientTaskIntegration : MonoBehaviour { [Header("所有任务")] public List tasks = new List(); [Header("活跃任务")] public List activeTasks = new List(); [Header("已完成任务")] public List completedTasks = new List(); private GameClient client; private TaskPanel taskPanel; private void Start() { // 在游戏客户端启动时初始化任务系统 client = FindFirstObjectByType(); client = GameClient.Get(); if (client != null) { // 玩家连接到游戏服务器时触发任务检查 client.onConnectServer += OnConnectToServer; } else { Debug.LogError($"---{client}为空----"); } if (TaskManager.Instance != null) { TaskManager.Instance.refreshTaskUI += OnRefreshTaskPanel; TaskManager.Instance.ResetUIPanel(); } // 找 UI 面板 taskPanel = GetComponent(); if (taskPanel == null) { taskPanel = FindObjectOfType(); } } private void OnDestroy() { client.onConnectServer -= OnConnectToServer; TaskManager.Instance.refreshTaskUI -= OnRefreshTaskPanel; } private void OnConnectToServer() { // 玩家登录时检查任务 TaskManager taskManager = TaskManager.Instance; if (taskManager != null) { taskManager.OnPlayerLogin(); // 强制第一次刷新 OnRefreshTaskPanel(TaskManager.Instance.GetAllTasks()); } } private void OnRefreshTaskPanel(List 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; } } } }