using UnityEngine; using BaseGames.Core.Save; using BaseGames.Player; namespace BaseGames.Progression { /// 解锁所有指定能力的成就条件(位掩码检查)。 [CreateAssetMenu(menuName = "BaseGames/Achievement/Condition/UnlockedAllAbilities", fileName = "COND_UnlockedAllAbilities")] public class UnlockedAllAbilitiesCondition : AchievementCondition { [Tooltip("需要全部解锁的能力组合(位掩码)")] public AbilityType requiredAbilities = AbilityType.AllMovement; public override bool IsMet(SaveData save) { if (save?.Player == null) return false; var flags = (AbilityType)save.Player.AbilityFlags; return (flags & requiredAbilities) == requiredAbilities; } public override float GetProgress(SaveData save) { if (save?.Player == null) return 0f; var flags = (AbilityType)save.Player.AbilityFlags; int required = 0, met = 0; for (int i = 0; i < 32; i++) { var bit = (AbilityType)(1u << i); if ((requiredAbilities & bit) != 0) { required++; if ((flags & bit) != 0) met++; } } return required > 0 ? (float)met / required : 0f; } } }