r2mods/ilspy_dump/ror2_csproj/EntityStates.Mage/FlyUpState.cs

125 lines
3.2 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using RoR2;
using UnityEngine;
using UnityEngine.Networking;
namespace EntityStates.Mage;
public class FlyUpState : MageCharacterMain
{
public static GameObject blinkPrefab;
public static float duration = 0.3f;
public static string beginSoundString;
public static string endSoundString;
public static AnimationCurve speedCoefficientCurve;
public static GameObject muzzleflashEffect;
public static float blastAttackRadius;
public static float blastAttackDamageCoefficient;
public static float blastAttackProcCoefficient;
public static float blastAttackForce;
private Vector3 flyVector = Vector3.zero;
private Transform modelTransform;
private CharacterModel characterModel;
private HurtBoxGroup hurtboxGroup;
private Vector3 blastPosition;
public override void OnEnter()
{
base.OnEnter();
Util.PlaySound(beginSoundString, base.gameObject);
modelTransform = GetModelTransform();
flyVector = Vector3.up;
CreateBlinkEffect(Util.GetCorePosition(base.gameObject));
PlayCrossfade("Body", "FlyUp", "FlyUp.playbackRate", duration, 0.1f);
base.characterMotor.Motor.ForceUnground();
base.characterMotor.velocity = Vector3.zero;
EffectManager.SimpleMuzzleFlash(muzzleflashEffect, base.gameObject, "MuzzleLeft", transmit: false);
EffectManager.SimpleMuzzleFlash(muzzleflashEffect, base.gameObject, "MuzzleRight", transmit: false);
if (base.isAuthority)
{
blastPosition = base.characterBody.corePosition;
}
if (NetworkServer.active)
{
BlastAttack obj = new BlastAttack
{
radius = blastAttackRadius,
procCoefficient = blastAttackProcCoefficient,
position = blastPosition,
attacker = base.gameObject,
crit = Util.CheckRoll(base.characterBody.crit, base.characterBody.master),
baseDamage = base.characterBody.damage * blastAttackDamageCoefficient,
falloffModel = BlastAttack.FalloffModel.None,
baseForce = blastAttackForce
};
obj.teamIndex = TeamComponent.GetObjectTeam(obj.attacker);
obj.damageType = DamageType.Stun1s;
obj.attackerFiltering = AttackerFiltering.NeverHitSelf;
obj.Fire();
}
}
public override void OnSerialize(NetworkWriter writer)
{
base.OnSerialize(writer);
writer.Write(blastPosition);
}
public override void OnDeserialize(NetworkReader reader)
{
base.OnDeserialize(reader);
blastPosition = reader.ReadVector3();
}
public override void HandleMovements()
{
base.HandleMovements();
base.characterMotor.rootMotion += flyVector * (moveSpeedStat * speedCoefficientCurve.Evaluate(base.fixedAge / duration) * GetDeltaTime());
base.characterMotor.velocity.y = 0f;
}
protected override void UpdateAnimationParameters()
{
base.UpdateAnimationParameters();
}
private void CreateBlinkEffect(Vector3 origin)
{
EffectData effectData = new EffectData();
effectData.rotation = Util.QuaternionSafeLookRotation(flyVector);
effectData.origin = origin;
EffectManager.SpawnEffect(blinkPrefab, effectData, transmit: false);
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (base.fixedAge >= duration && base.isAuthority)
{
outer.SetNextStateToMain();
}
}
public override void OnExit()
{
if (!outer.destroying)
{
Util.PlaySound(endSoundString, base.gameObject);
}
base.OnExit();
}
}