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(); public Map.Landform landform; private void Start() { Reload(); landform = Program.Instance.FocusedDimension?.landform; } 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}"); // 可以选择忽略或者重新抛出 } } landform?.Clear(); // --- 清理和初始化阶段 --- DefineManager.Instance.Clear(); PackagesImageManager.Instance.Clear(); TileManager.Instance.Clear(); DefineManager.Instance.Init(); PackagesImageManager.Instance.Init(); TileManager.Instance.Init(); // --- 清理和初始化阶段结束 --- // 启动新的地图生成任务 StartNewMapGeneration(); // 这是一个非 async 的包装方法 } /// /// 启动新的地图生成任务,并更新 _currentMapGenerationTask。 /// private void StartNewMapGeneration() { lock (_mapGenerationLock) { _currentMapGenerationTask = InitializeMapGenerationAsync(); } } /// /// 异步初始化并应用所有地图生成器。 /// 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}"); } } } }