r2mods/ilspy_dump/ror2_csproj/RoR2.Achievements.Engi/EngiArmyAchievement.cs

74 lines
1.8 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using Assets.RoR2.Scripts.Platform;
using UnityEngine.Networking;
namespace RoR2.Achievements.Engi;
[RegisterAchievement("EngiArmy", "Skills.Engi.WalkerTurret", "Complete30StagesCareer", 3u, null)]
public class EngiArmyAchievement : BaseAchievement
{
private static readonly int requirement = 12;
private ToggleAction monitorMinions;
protected override BodyIndex LookUpRequiredBodyIndex()
{
return BodyCatalog.FindBodyIndex("EngiBody");
}
private void SubscribeToMinionChanges()
{
MinionOwnership.onMinionGroupChangedGlobal += OnMinionGroupChangedGlobal;
}
private void UnsubscribeFromMinionChanges()
{
MinionOwnership.onMinionGroupChangedGlobal -= OnMinionGroupChangedGlobal;
}
private void OnMinionGroupChangedGlobal(MinionOwnership minion)
{
if (requirement > (minion.group?.memberCount ?? 0))
{
return;
}
CharacterMaster master = base.localUser.cachedMasterController.master;
if ((bool)master)
{
NetworkInstanceId netId = master.netId;
if (minion.group.ownerId == netId)
{
Grant();
TryToCompleteActivity();
}
}
}
public override void TryToCompleteActivity()
{
if (base.localUser.id == LocalUserManager.GetFirstLocalUser().id && shouldGrant)
{
BaseActivitySelector baseActivitySelector = new BaseActivitySelector();
baseActivitySelector.activityAchievementID = "EngiArmy";
PlatformSystems.activityManager.TryToCompleteActivity(baseActivitySelector);
}
}
public override void OnInstall()
{
base.OnInstall();
monitorMinions = new ToggleAction(SubscribeToMinionChanges, UnsubscribeFromMinionChanges);
}
protected override void OnBodyRequirementMet()
{
base.OnBodyRequirementMet();
monitorMinions.SetActive(newActive: true);
}
protected override void OnBodyRequirementBroken()
{
monitorMinions.SetActive(newActive: false);
base.OnBodyRequirementBroken();
}
}