65 lines
1.3 KiB
C#
65 lines
1.3 KiB
C#
using RoR2;
|
|
using UnityEngine;
|
|
|
|
namespace EntityStates.CaptainSupplyDrop;
|
|
|
|
public class ShockZoneMainState : BaseMainState
|
|
{
|
|
public static GameObject shockEffectPrefab;
|
|
|
|
public static float shockRadius;
|
|
|
|
public static float shockDamageCoefficient;
|
|
|
|
public static float shockFrequency;
|
|
|
|
private float shockTimer;
|
|
|
|
protected override Interactability GetInteractability(Interactor activator)
|
|
{
|
|
return Interactability.Disabled;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
base.OnEnter();
|
|
}
|
|
|
|
public override void FixedUpdate()
|
|
{
|
|
base.FixedUpdate();
|
|
shockTimer += GetDeltaTime();
|
|
if (shockTimer > 1f / shockFrequency)
|
|
{
|
|
shockTimer -= 1f / shockFrequency;
|
|
Shock();
|
|
}
|
|
}
|
|
|
|
private void Shock()
|
|
{
|
|
BlastAttack blastAttack = new BlastAttack();
|
|
blastAttack.radius = shockRadius;
|
|
blastAttack.baseDamage = 0f;
|
|
blastAttack.damageType = DamageType.Silent | DamageType.Shock5s;
|
|
blastAttack.falloffModel = BlastAttack.FalloffModel.None;
|
|
blastAttack.attacker = null;
|
|
blastAttack.teamIndex = teamFilter.teamIndex;
|
|
blastAttack.position = base.transform.position;
|
|
blastAttack.Fire();
|
|
if ((bool)shockEffectPrefab)
|
|
{
|
|
EffectManager.SpawnEffect(shockEffectPrefab, new EffectData
|
|
{
|
|
origin = base.transform.position,
|
|
scale = shockRadius
|
|
}, transmit: false);
|
|
}
|
|
}
|
|
|
|
public override void OnExit()
|
|
{
|
|
base.OnExit();
|
|
}
|
|
}
|