2025-09-19 08:26:54 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using Managers;
|
|
|
|
|
|
using UI;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using Map;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Test
|
|
|
|
|
|
{
|
|
|
|
|
|
public class TestInit : MonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
public SkillTreeUI skillTreePageUI;
|
|
|
|
|
|
|
|
|
|
|
|
private Task _currentMapGenerationTask = Task.CompletedTask; // 初始化为已完成任务
|
|
|
|
|
|
private readonly object _mapGenerationLock = new object();
|
2025-09-28 15:02:57 +08:00
|
|
|
|
public Map.Landform landform;
|
2025-09-19 08:26:54 +08:00
|
|
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
|
|
{
|
|
|
|
|
|
Reload();
|
2025-09-28 15:02:57 +08:00
|
|
|
|
landform = Program.Instance.FocusedDimension?.landform;
|
2025-09-19 08:26:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async void Reload() // Make Reload async to await the previous task
|
|
|
|
|
|
{
|
|
|
|
|
|
// 在清理之前,等待任何正在进行的地图生成任务完成
|
|
|
|
|
|
// 注意:这会使 Reload() 异步,并且在等待期间 UI 可能会被阻塞,
|
|
|
|
|
|
// 或者如果你不await,后续代码可能在任务完成前执行。
|
|
|
|
|
|
Task oldMapTask;
|
|
|
|
|
|
lock (_mapGenerationLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
oldMapTask = _currentMapGenerationTask;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!oldMapTask.IsCompleted)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log("TestInit: 等待之前的地图生成任务完成,然后再进行清理和新生成...");
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
await oldMapTask; // 等待之前的任务完成
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogWarning($"TestInit: 之前的地图生成任务在等待时失败: {ex.Message}");
|
|
|
|
|
|
// 可以选择忽略或者重新抛出
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-28 15:02:57 +08:00
|
|
|
|
landform?.Clear();
|
2025-09-19 08:26:54 +08:00
|
|
|
|
|
|
|
|
|
|
// --- 清理和初始化阶段 ---
|
|
|
|
|
|
DefineManager.Instance.Clear();
|
|
|
|
|
|
PackagesImageManager.Instance.Clear();
|
|
|
|
|
|
TileManager.Instance.Clear();
|
|
|
|
|
|
|
|
|
|
|
|
DefineManager.Instance.Init();
|
|
|
|
|
|
PackagesImageManager.Instance.Init();
|
|
|
|
|
|
TileManager.Instance.Init();
|
|
|
|
|
|
// --- 清理和初始化阶段结束 ---
|
|
|
|
|
|
|
|
|
|
|
|
// 启动新的地图生成任务
|
|
|
|
|
|
StartNewMapGeneration(); // 这是一个非 async 的包装方法
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 启动新的地图生成任务,并更新 _currentMapGenerationTask。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private void StartNewMapGeneration()
|
|
|
|
|
|
{
|
|
|
|
|
|
lock (_mapGenerationLock)
|
|
|
|
|
|
{
|
|
|
|
|
|
_currentMapGenerationTask = InitializeMapGenerationAsync();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 异步初始化并应用所有地图生成器。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private async Task InitializeMapGenerationAsync()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// 异步应用地图生成器,并且按顺序等待它们完成
|
|
|
|
|
|
await TileManager.Instance.ApplyMapGenerator("DefaultMapGenerator");
|
|
|
|
|
|
// await TileManager.Instance.ApplyMapGenerator("WaterMapGenerator");
|
|
|
|
|
|
await TileManager.Instance.ApplyMapGenerator("TreeGenerator");
|
|
|
|
|
|
|
|
|
|
|
|
Debug.Log("TestInit: 所有地图生成器已成功应用并完成。");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (OperationCanceledException)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogWarning("TestInit: 地图生成任务被取消。");
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"TestInit: 在地图生成过程中发生未处理的错误: {ex.Message}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|