63 lines
1.4 KiB
C#
63 lines
1.4 KiB
C#
using System;
|
|
using RoR2.Stats;
|
|
|
|
namespace RoR2.Achievements;
|
|
|
|
public abstract class BaseStatMilestoneAchievement : BaseAchievement
|
|
{
|
|
protected abstract StatDef statDef { get; }
|
|
|
|
protected abstract ulong statRequirement { get; }
|
|
|
|
private ulong statProgress => base.userProfile.statSheet.GetStatValueULong(statDef);
|
|
|
|
public override void OnInstall()
|
|
{
|
|
base.OnInstall();
|
|
UserProfile obj = base.userProfile;
|
|
obj.onStatsReceived = (Action)Delegate.Combine(obj.onStatsReceived, new Action(Check));
|
|
if (IsProgressiveAchievement())
|
|
{
|
|
StatDef obj2 = statDef;
|
|
obj2.onChangeCallback = (Action)Delegate.Combine(obj2.onChangeCallback, new Action(base.UpdateProgress));
|
|
}
|
|
Check();
|
|
}
|
|
|
|
public override void OnUninstall()
|
|
{
|
|
UserProfile obj = base.userProfile;
|
|
obj.onStatsReceived = (Action)Delegate.Remove(obj.onStatsReceived, new Action(Check));
|
|
if (IsProgressiveAchievement())
|
|
{
|
|
StatDef obj2 = statDef;
|
|
obj2.onChangeCallback = (Action)Delegate.Remove(obj2.onChangeCallback, new Action(base.UpdateProgress));
|
|
}
|
|
base.OnUninstall();
|
|
}
|
|
|
|
public override float ProgressForAchievement()
|
|
{
|
|
return (float)statProgress / (float)statRequirement;
|
|
}
|
|
|
|
public override ulong GetCurrentProgress()
|
|
{
|
|
return statProgress;
|
|
}
|
|
|
|
public override ulong GetProgressRequirement()
|
|
{
|
|
return statRequirement;
|
|
}
|
|
|
|
private void Check()
|
|
{
|
|
if (statProgress >= statRequirement)
|
|
{
|
|
Grant();
|
|
TryToCompleteActivity();
|
|
}
|
|
}
|
|
}
|