mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 02:37:12 +08:00
Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com> Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/60
76 lines
2.9 KiB
C#
76 lines
2.9 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|