109 lines
3.3 KiB
C#
109 lines
3.3 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 Start()
|
|
{
|
|
// 在游戏客户端启动时初始化任务系统
|
|
client = FindFirstObjectByType<GameClient>();
|
|
client = GameClient.Get();
|
|
if (client != null)
|
|
{
|
|
// 玩家连接到游戏服务器时触发任务检查
|
|
client.onConnectServer += OnConnectToServer;
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"---{client}为空----");
|
|
}
|
|
|
|
if (TaskManager.Instance != null)
|
|
{
|
|
TaskManager.Instance.refreshTaskUI += OnRefreshTaskPanel;
|
|
}
|
|
|
|
// 找 UI 面板
|
|
taskPanel = GetComponent<TaskPanel>();
|
|
if (taskPanel == null)
|
|
{
|
|
taskPanel = FindObjectOfType<TaskPanel>();
|
|
}
|
|
|
|
}
|
|
|
|
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<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;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
} |