using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; // 引入 Task using Data; using Utils; namespace Managers { public class HediffManager : Singleton, ILaunchManager { private HediffDef[] _baseHediffsCache; private bool _needUpdate = true; public HediffDef[] BaseHediffs { get { if (_needUpdate || _baseHediffsCache == null) { // 注意:这里仍然假设 SkillTreeManager.Instance 总是可用,遵循不检查单例的原则。 var skill = SkillTreeManager.Instance.UnlockedSkillTreesList; var result = new List(); foreach (var skillTree in skill.Where(skillTree => skillTree.unlockedHediffs != null)) result.AddRange(skillTree.unlockedHediffs); _baseHediffsCache = result.ToArray(); _needUpdate = false; // 缓存更新后,重置标志 } return _baseHediffsCache; } } /// /// 指示管理器是否已完成初始化。 /// public bool Completed { get; set; } // 接口变更:Loaded 变为 Completed public string StepDescription => "计算基础健康状态"; /// /// 初始化健康状态管理器。 /// /// 一个表示异步操作完成的 Task。 public async Task Init() // 接口变更:方法签名变为 async Task { // 注意:这里仍然假设 SkillTreeManager.Instance 总是可用,遵循不检查单例的原则。 SkillTreeManager.Instance.OnSkillTreeLocked += NeedUpdate; SkillTreeManager.Instance.OnSkillTreeUnlocked += NeedUpdate; Completed = true; // 接口变更:设置 Completed 为 true // 由于 Init 方法内部没有真正的异步操作,不需要显式 await Task.CompletedTask; // 编译器会为同步的 async Task 方法自动生成一个已完成的 Task。 } /// /// 清理健康状态管理器,取消事件订阅。 /// public void Clear() { // 注意:这里仍然假设 SkillTreeManager.Instance 总是可用,遵循不检查单例的原则。 SkillTreeManager.Instance.OnSkillTreeLocked -= NeedUpdate; SkillTreeManager.Instance.OnSkillTreeUnlocked -= NeedUpdate; _baseHediffsCache = null; // 清理缓存 _needUpdate = true; // 确保下次访问 BaseHediffs 时重新计算 Completed = false; // 清理后将 Completed 置为 false } public void NeedUpdate(SkillTreeDef treeDef) { _needUpdate = true; } } }