(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)

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
This commit is contained in:
2025-10-10 14:08:23 +08:00
parent 9a797479ff
commit 16b49f3d3a
1900 changed files with 114053 additions and 34157 deletions

View File

@@ -1,10 +1,75 @@
using System;
using Entity;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; // 引入 Task
using Data;
using Utils;
namespace Managers
{
public class HediffManager:Utils.Singleton<HediffManager>
public class HediffManager : Singleton<HediffManager>, ILaunchManager
{
public Hediff[] BaseHediffs= Array.Empty<Hediff>();
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;
}
}
}
}