Files
Gen_Hack-and-Slash-Roguelite/Client/Assets/Scripts/Managers/HediffManager.cs

76 lines
2.9 KiB
C#
Raw Normal View History

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;
}
}
}