多轮审查和修复
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
using UnityEngine;
|
||||
using BaseGames.Core.Save;
|
||||
using BaseGames.Player;
|
||||
|
||||
namespace BaseGames.Progression
|
||||
{
|
||||
/// <summary>解锁所有指定能力的成就条件(位掩码检查)。</summary>
|
||||
[CreateAssetMenu(menuName = "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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user