r2mods/ilspy_dump/ror2_csproj/RoR2.Achievements.Treebot/TreebotLowHealthTeleporterA...

97 lines
2.6 KiB
C#

using Assets.RoR2.Scripts.Platform;
namespace RoR2.Achievements.Treebot;
[RegisterAchievement("TreebotLowHealthTeleporter", "Skills.Treebot.Barrage", "RescueTreebot", 3u, null)]
public class TreebotLowHealthTeleporterAchievement : BaseAchievement
{
private static readonly float requirement = 0.5f;
private ToggleAction healthMonitor;
private HealthComponent targetHealthComponent;
private bool failed = true;
private HealthComponent healthComponent;
protected override BodyIndex LookUpRequiredBodyIndex()
{
return BodyCatalog.FindBodyIndex("TreebotBody");
}
public override void TryToCompleteActivity()
{
if (base.localUser.id == LocalUserManager.GetFirstLocalUser().id && shouldGrant)
{
BaseActivitySelector baseActivitySelector = new BaseActivitySelector();
baseActivitySelector.activityAchievementID = "TreebotLowHealthTeleporter";
PlatformSystems.activityManager.TryToCompleteActivity(baseActivitySelector);
}
}
private void OnTeleporterBeginChargingGlobal(TeleporterInteraction teleporterInteraction)
{
failed = false;
healthMonitor.SetActive(newActive: true);
}
private void OnTeleporterChargedGlobal(TeleporterInteraction teleporterInteraction)
{
if (!failed)
{
Grant();
TryToCompleteActivity();
}
}
private void SubscribeHealthMonitor()
{
RoR2Application.onFixedUpdate += OnFixedUpdateMonitorHealth;
}
private void UnsubscribeHealthMonitor()
{
RoR2Application.onFixedUpdate -= OnFixedUpdateMonitorHealth;
}
private void OnFixedUpdateMonitorHealth()
{
if (!healthComponent || requirement < healthComponent.combinedHealthFraction)
{
failed = true;
healthMonitor.SetActive(newActive: false);
}
}
public override void OnInstall()
{
base.OnInstall();
healthMonitor = new ToggleAction(SubscribeHealthMonitor, UnsubscribeHealthMonitor);
}
protected override void OnBodyRequirementMet()
{
base.OnBodyRequirementMet();
TeleporterInteraction.onTeleporterBeginChargingGlobal += OnTeleporterBeginChargingGlobal;
TeleporterInteraction.onTeleporterChargedGlobal += OnTeleporterChargedGlobal;
base.localUser.onBodyChanged += OnBodyChanged;
OnBodyChanged();
}
private void OnBodyChanged()
{
healthComponent = base.localUser.cachedBody?.healthComponent;
}
protected override void OnBodyRequirementBroken()
{
base.localUser.onBodyChanged -= OnBodyChanged;
TeleporterInteraction.onTeleporterChargedGlobal -= OnTeleporterChargedGlobal;
TeleporterInteraction.onTeleporterBeginChargingGlobal -= OnTeleporterBeginChargingGlobal;
healthMonitor.SetActive(newActive: false);
healthComponent = null;
base.OnBodyRequirementBroken();
}
}