using UnityEngine; using BaseGames.Core.Save; namespace BaseGames.Progression { /// /// 无治疗通关成就条件。 /// 依赖 World.Switches 中的标志位:AchievementManager 在玩家治疗时写入 noHeal_failed=true。 /// 满足条件:Boss 已击败 且 无治疗标志未被置入失败状态。 /// [CreateAssetMenu(menuName = "BaseGames/Achievement/Condition/NoHealRun", fileName = "COND_NoHealRun_")] public class NoHealRunCondition : AchievementCondition { [Tooltip("追踪的 Boss ID(击败此 Boss 时检查是否治疗过)")] public string targetBossId; [Tooltip("Switches 中记录「已治疗」失败状态的 Key(由 AchievementManager 设置)")] public string healFailFlagKey; public override bool IsMet(SaveData save) { if (save?.World == null) return false; // Boss 已击败 且 未触发治疗失败标志 bool bossDefeated = save.World.DefeatedBossIds.Contains(targetBossId); bool didHeal = save.World.Switches.TryGetValue(healFailFlagKey, out bool val) && val; return bossDefeated && !didHeal; } } }