r2mods/ilspy_dump/ror2_csproj/EntityStates.Croco/Bite.cs

91 lines
2.2 KiB
C#

using RoR2;
using UnityEngine;
namespace EntityStates.Croco;
public class Bite : BasicMeleeAttack
{
public static float recoilAmplitude;
public static float baseDurationBeforeInterruptable;
[SerializeField]
public float bloom;
public static string biteSound;
private string animationStateName;
private float durationBeforeInterruptable;
private CrocoDamageTypeController crocoDamageTypeController;
private bool hasGrantedBuff;
protected override bool allowExitFire
{
get
{
if ((bool)base.characterBody)
{
return !base.characterBody.isSprinting;
}
return false;
}
}
public override void OnEnter()
{
base.OnEnter();
base.characterDirection.forward = GetAimRay().direction;
durationBeforeInterruptable = baseDurationBeforeInterruptable / attackSpeedStat;
crocoDamageTypeController = GetComponent<CrocoDamageTypeController>();
}
public override void OnExit()
{
base.OnExit();
}
protected override void AuthorityModifyOverlapAttack(OverlapAttack overlapAttack)
{
base.AuthorityModifyOverlapAttack(overlapAttack);
DamageTypeCombo damageTypeCombo = (crocoDamageTypeController ? crocoDamageTypeController.GetDamageType() : DamageTypeCombo.Generic);
overlapAttack.damageType = damageTypeCombo | DamageType.BonusToLowHealth;
}
protected override void PlayAnimation()
{
float num = Mathf.Max(duration, 0.2f);
PlayCrossfade("Gesture, Additive", "Bite", "Bite.playbackRate", num, 0.05f);
PlayCrossfade("Gesture, Override", "Bite", "Bite.playbackRate", num, 0.05f);
Util.PlaySound(biteSound, base.gameObject);
}
protected override void OnMeleeHitAuthority()
{
base.OnMeleeHitAuthority();
base.characterBody.AddSpreadBloom(bloom);
if (!hasGrantedBuff)
{
hasGrantedBuff = true;
base.characterBody.AddTimedBuffAuthority(RoR2Content.Buffs.CrocoRegen.buffIndex, 0.5f);
}
}
protected override void BeginMeleeAttackEffect()
{
AddRecoil(0.9f * recoilAmplitude, 1.1f * recoilAmplitude, -0.1f * recoilAmplitude, 0.1f * recoilAmplitude);
base.BeginMeleeAttackEffect();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
if (!(base.fixedAge < durationBeforeInterruptable))
{
return InterruptPriority.Skill;
}
return InterruptPriority.Pain;
}
}