r2mods/ilspy_dump/ror2_csproj/EntityStates.Railgunner.Scope/BaseActive.cs

80 lines
1.8 KiB
C#

using RoR2;
using RoR2.Audio;
using RoR2.Skills;
using UnityEngine;
namespace EntityStates.Railgunner.Scope;
public class BaseActive : BaseScopeState
{
[SerializeField]
public SkillDef primaryOverride;
[SerializeField]
public LoopSoundDef loopSound;
private GenericSkill overriddenSkill;
private LoopSoundManager.SoundLoopPtr loopPtr;
public override void OnEnter()
{
base.OnEnter();
SetScopeAlpha(1f);
StartScopeParamsOverride(0f);
GenericSkill genericSkill = base.skillLocator?.primary;
if ((bool)genericSkill)
{
TryOverrideSkill(genericSkill);
genericSkill.onSkillChanged += TryOverrideSkill;
}
if (base.isAuthority)
{
loopPtr = LoopSoundManager.PlaySoundLoopLocal(base.gameObject, loopSound);
}
}
public override void OnExit()
{
if (loopPtr.isValid)
{
LoopSoundManager.StopSoundLoopLocal(loopPtr);
}
GenericSkill genericSkill = base.skillLocator?.primary;
if ((bool)genericSkill)
{
genericSkill.onSkillChanged -= TryOverrideSkill;
}
if ((bool)overriddenSkill)
{
overriddenSkill.UnsetSkillOverride(this, primaryOverride, GenericSkill.SkillOverridePriority.Contextual);
}
EndScopeParamsOverride(0f);
base.OnExit();
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (base.isAuthority && (!IsKeyDownAuthority() || base.characterBody.isSprinting))
{
outer.SetNextState(GetNextState());
}
}
private void TryOverrideSkill(GenericSkill skill)
{
if ((bool)skill && !overriddenSkill && !skill.HasSkillOverrideOfPriority(GenericSkill.SkillOverridePriority.Contextual))
{
overriddenSkill = skill;
overriddenSkill.SetSkillOverride(this, primaryOverride, GenericSkill.SkillOverridePriority.Contextual);
overriddenSkill.stock = base.skillLocator.secondary.stock;
}
}
protected virtual BaseWindDown GetNextState()
{
return new BaseWindDown();
}
}