r2mods/ilspy_dump/ror2_csproj/EntityStates.Wisp1Monster/ChargeEmbers.cs

191 lines
4.9 KiB
C#
Raw Permalink Normal View History

2024-10-04 07:26:37 +00:00
using RoR2;
using UnityEngine;
namespace EntityStates.Wisp1Monster;
public class ChargeEmbers : BaseState
{
public static float baseDuration = 3f;
public static GameObject chargeEffectPrefab;
public static GameObject laserEffectPrefab;
public static string attackString;
private float duration;
private float stopwatch;
private uint soundID;
private GameObject chargeEffectInstance;
private GameObject laserEffectInstance;
private LineRenderer laserEffectInstanceLineRenderer;
private bool lineRendererNull;
protected EffectManagerHelper _emh_chargeEffect;
protected EffectManagerHelper _emh_laserEffect;
private Color startColor = Color.white;
private static int ChargeAttack1StateHash = Animator.StringToHash("ChargeAttack1");
private static int ChargeAttack1ParamHash = Animator.StringToHash("ChargeAttack1.playbackRate");
public override void Reset()
{
base.Reset();
duration = 0f;
chargeEffectInstance = null;
laserEffectInstance = null;
laserEffectInstanceLineRenderer = null;
lineRendererNull = true;
_emh_chargeEffect = null;
_emh_laserEffect = null;
startColor = Color.white;
}
public override void OnEnter()
{
base.OnEnter();
SetAIUpdateFrequency(alwaysUpdate: true);
stopwatch = 0f;
duration = baseDuration / attackSpeedStat;
soundID = Util.PlayAttackSpeedSound(attackString, base.gameObject, attackSpeedStat);
Transform modelTransform = GetModelTransform();
if ((bool)modelTransform)
{
ChildLocator component = modelTransform.GetComponent<ChildLocator>();
if ((bool)component)
{
Transform transform = component.FindChild("Muzzle");
if ((bool)transform)
{
if ((bool)chargeEffectPrefab)
{
if (!EffectManager.ShouldUsePooledEffect(chargeEffectPrefab))
{
chargeEffectInstance = Object.Instantiate(chargeEffectPrefab, transform.position, transform.rotation);
}
else
{
_emh_chargeEffect = EffectManager.GetAndActivatePooledEffect(chargeEffectPrefab, transform.position, transform.rotation);
chargeEffectInstance = _emh_chargeEffect.gameObject;
}
chargeEffectInstance.transform.parent = transform;
ScaleParticleSystemDuration component2 = chargeEffectInstance.GetComponent<ScaleParticleSystemDuration>();
if ((bool)component2)
{
component2.newDuration = duration;
}
}
if ((bool)laserEffectPrefab)
{
if (!EffectManager.ShouldUsePooledEffect(laserEffectPrefab))
{
laserEffectInstance = Object.Instantiate(laserEffectPrefab, transform.position, transform.rotation);
}
else
{
_emh_laserEffect = EffectManager.GetAndActivatePooledEffect(laserEffectPrefab, transform.position, transform.rotation);
laserEffectInstance = _emh_laserEffect.gameObject;
}
laserEffectInstance.transform.parent = transform;
laserEffectInstanceLineRenderer = laserEffectInstance.GetComponent<LineRenderer>();
lineRendererNull = false;
}
}
}
}
PlayAnimation("Body", ChargeAttack1StateHash, ChargeAttack1ParamHash, duration);
if ((bool)base.characterBody)
{
base.characterBody.SetAimTimer(duration);
}
}
public override void OnExit()
{
base.OnExit();
SetAIUpdateFrequency(alwaysUpdate: false);
AkSoundEngine.StopPlayingID(soundID);
if ((bool)chargeEffectInstance)
{
if (!EffectManager.UsePools)
{
EntityState.Destroy(chargeEffectInstance);
}
else if (_emh_chargeEffect != null && _emh_chargeEffect.OwningPool != null)
{
_emh_chargeEffect.OwningPool.ReturnObject(_emh_chargeEffect);
}
else
{
EntityState.Destroy(chargeEffectInstance);
}
chargeEffectInstance = null;
_emh_chargeEffect = null;
}
if ((bool)laserEffectInstance)
{
if (!EffectManager.UsePools)
{
EntityState.Destroy(laserEffectInstance);
}
else if (_emh_laserEffect != null && _emh_laserEffect.OwningPool != null)
{
_emh_laserEffect.OwningPool.ReturnObject(_emh_laserEffect);
}
else
{
EntityState.Destroy(laserEffectInstance);
}
laserEffectInstance = null;
_emh_laserEffect = null;
lineRendererNull = true;
}
}
public override void Update()
{
base.Update();
if (!lineRendererNull)
{
if (!laserEffectInstanceLineRenderer)
{
lineRendererNull = true;
return;
}
Ray aimRay = GetAimRay();
float distance = 50f;
Vector3 origin = aimRay.origin;
Vector3 point = aimRay.GetPoint(distance);
laserEffectInstanceLineRenderer.SetPosition(0, origin);
laserEffectInstanceLineRenderer.SetPosition(1, point);
startColor.a = stopwatch / duration;
laserEffectInstanceLineRenderer.startColor = startColor;
laserEffectInstanceLineRenderer.endColor = Color.clear;
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
stopwatch += GetDeltaTime();
if (stopwatch >= duration && base.isAuthority)
{
outer.SetNextState(new FireEmbers());
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return InterruptPriority.Skill;
}
}