r2mods/ilspy_dump/ror2_csproj/RoR2.Achievements/CompleteTeleporterWithoutIn...

50 lines
1.4 KiB
C#

namespace RoR2.Achievements;
[RegisterAchievement("CompleteTeleporterWithoutInjury", "Items.SecondarySkillMagazine", null, 1u, null)]
public class CompleteTeleporterWithoutInjuryAchievement : BaseAchievement
{
private bool hasBeenHit;
public override void OnInstall()
{
base.OnInstall();
TeleporterInteraction.onTeleporterBeginChargingGlobal += OnTeleporterBeginCharging;
TeleporterInteraction.onTeleporterChargedGlobal += OnTeleporterCharged;
GlobalEventManager.onClientDamageNotified += OnClientDamageNotified;
}
public override void OnUninstall()
{
TeleporterInteraction.onTeleporterBeginChargingGlobal -= OnTeleporterBeginCharging;
TeleporterInteraction.onTeleporterChargedGlobal -= OnTeleporterCharged;
GlobalEventManager.onClientDamageNotified -= OnClientDamageNotified;
base.OnUninstall();
}
private void OnTeleporterBeginCharging(TeleporterInteraction teleporterInteraction)
{
hasBeenHit = false;
}
private void OnTeleporterCharged(TeleporterInteraction teleporterInteraction)
{
Check();
}
private void OnClientDamageNotified(DamageDealtMessage damageDealtMessage)
{
if (!hasBeenHit && (bool)damageDealtMessage.victim && damageDealtMessage.victim == base.localUser.cachedBodyObject)
{
hasBeenHit = true;
}
}
private void Check()
{
if ((bool)base.localUser.cachedBody && (bool)base.localUser.cachedBody.healthComponent && base.localUser.cachedBody.healthComponent.alive && !hasBeenHit)
{
Grant();
}
}
}