64 lines
1.3 KiB
C#
64 lines
1.3 KiB
C#
using RoR2.Stats;
|
|
|
|
namespace RoR2.Achievements;
|
|
|
|
[RegisterAchievement("FindUniqueNewtStatues", "Items.Talisman", null, 3u, null)]
|
|
public class FindUniqueNewtStatues : BaseAchievement
|
|
{
|
|
private const int requirement = 8;
|
|
|
|
public override void OnInstall()
|
|
{
|
|
base.OnInstall();
|
|
Check();
|
|
UserProfile.onUnlockableGranted += OnUnlockCheck;
|
|
}
|
|
|
|
public override void OnUninstall()
|
|
{
|
|
UserProfile.onUnlockableGranted -= OnUnlockCheck;
|
|
base.OnUninstall();
|
|
}
|
|
|
|
public override float ProgressForAchievement()
|
|
{
|
|
return (float)UniqueNewtStatueCount() / 8f;
|
|
}
|
|
|
|
private static bool IsUnlockableNewtStatue(UnlockableDef unlockableDef)
|
|
{
|
|
return unlockableDef.cachedName.StartsWith("NewtStatue.");
|
|
}
|
|
|
|
private int UniqueNewtStatueCount()
|
|
{
|
|
StatSheet statSheet = base.userProfile.statSheet;
|
|
int num = 0;
|
|
int i = 0;
|
|
for (int unlockableCount = statSheet.GetUnlockableCount(); i < unlockableCount; i++)
|
|
{
|
|
if (IsUnlockableNewtStatue(statSheet.GetUnlockable(i)))
|
|
{
|
|
num++;
|
|
}
|
|
}
|
|
return num;
|
|
}
|
|
|
|
private void Check()
|
|
{
|
|
if (UniqueNewtStatueCount() >= 8)
|
|
{
|
|
Grant();
|
|
}
|
|
}
|
|
|
|
private void OnUnlockCheck(UserProfile userProfile, UnlockableDef unlockableDef)
|
|
{
|
|
if (userProfile == base.userProfile && IsUnlockableNewtStatue(unlockableDef))
|
|
{
|
|
Check();
|
|
}
|
|
}
|
|
}
|