Files

76 lines
2.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; // 引入 Task
using Data;
using Utils;
namespace Managers
{
public class HediffManager : Singleton<HediffManager>, 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<HediffDef>();
foreach (var skillTree in skill.Where(skillTree => skillTree.unlockedHediffs != null))
result.AddRange(skillTree.unlockedHediffs);
_baseHediffsCache = result.ToArray();
_needUpdate = false; // 缓存更新后,重置标志
}
return _baseHediffsCache;
}
}
/// <summary>
/// 指示管理器是否已完成初始化。
/// </summary>
public bool Completed { get; set; } // 接口变更Loaded 变为 Completed
public string StepDescription => "计算基础健康状态";
/// <summary>
/// 初始化健康状态管理器。
/// </summary>
/// <returns>一个表示异步操作完成的 Task。</returns>
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。
}
/// <summary>
/// 清理健康状态管理器,取消事件订阅。
/// </summary>
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;
}
}
}