Files
zeling_v2/Assets/_Game/Scripts/Progression/Achievement/UnlockedAllAbilitiesCondition.cs

39 lines
1.4 KiB
C#

using UnityEngine;
using BaseGames.Core.Save;
using BaseGames.Player;
namespace BaseGames.Progression
{
/// <summary>解锁所有指定能力的成就条件(位掩码检查)。</summary>
[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;
}
}
}