2025-10-10 14:08:23 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Threading.Tasks; // 引入 Task
|
|
|
|
|
|
using Data;
|
|
|
|
|
|
using Utils;
|
2025-09-28 15:02:57 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Managers
|
|
|
|
|
|
{
|
2025-10-10 14:08:23 +08:00
|
|
|
|
public class HediffManager : Singleton<HediffManager>, ILaunchManager
|
2025-09-28 15:02:57 +08:00
|
|
|
|
{
|
2025-10-10 14:08:23 +08:00
|
|
|
|
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;
|
|
|
|
|
|
}
|
2025-09-28 15:02:57 +08:00
|
|
|
|
}
|
2025-10-10 14:08:23 +08:00
|
|
|
|
}
|