83 lines
1.9 KiB
C#
83 lines
1.9 KiB
C#
using RoR2;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
namespace EntityStates.Destructible;
|
|
|
|
public class SulfurPodDeath : GenericCharacterDeath
|
|
{
|
|
public static GameObject chargePrefab;
|
|
|
|
public static float chargeDuration;
|
|
|
|
public static GameObject explosionEffectPrefab;
|
|
|
|
public static float explosionRadius;
|
|
|
|
public static float explosionDamageCoefficient;
|
|
|
|
public static float explosionProcCoefficient;
|
|
|
|
public static float explosionForce;
|
|
|
|
private bool hasExploded;
|
|
|
|
public override void OnEnter()
|
|
{
|
|
base.OnEnter();
|
|
if ((bool)chargePrefab)
|
|
{
|
|
Object.Instantiate(chargePrefab, base.transform);
|
|
}
|
|
}
|
|
|
|
public override void FixedUpdate()
|
|
{
|
|
base.FixedUpdate();
|
|
if (base.fixedAge >= chargeDuration)
|
|
{
|
|
Explode();
|
|
}
|
|
}
|
|
|
|
private void Explode()
|
|
{
|
|
if (!hasExploded)
|
|
{
|
|
hasExploded = true;
|
|
if ((bool)explosionEffectPrefab)
|
|
{
|
|
EffectManager.SpawnEffect(explosionEffectPrefab, new EffectData
|
|
{
|
|
origin = base.transform.position,
|
|
scale = explosionRadius,
|
|
rotation = Quaternion.identity
|
|
}, transmit: true);
|
|
}
|
|
DestroyModel();
|
|
if (NetworkServer.active)
|
|
{
|
|
BlastAttack blastAttack = new BlastAttack();
|
|
blastAttack.attacker = base.gameObject;
|
|
blastAttack.damageColorIndex = DamageColorIndex.Poison;
|
|
blastAttack.baseDamage = damageStat * explosionDamageCoefficient * Run.instance.teamlessDamageCoefficient;
|
|
blastAttack.radius = explosionRadius;
|
|
blastAttack.falloffModel = BlastAttack.FalloffModel.None;
|
|
blastAttack.procCoefficient = explosionProcCoefficient;
|
|
blastAttack.teamIndex = TeamIndex.None;
|
|
blastAttack.damageType = DamageType.PoisonOnHit;
|
|
blastAttack.position = base.transform.position;
|
|
blastAttack.baseForce = explosionForce;
|
|
blastAttack.attackerFiltering = AttackerFiltering.NeverHitSelf;
|
|
blastAttack.Fire();
|
|
DestroyBodyAsapServer();
|
|
}
|
|
}
|
|
}
|
|
|
|
public override InterruptPriority GetMinimumInterruptPriority()
|
|
{
|
|
return InterruptPriority.Death;
|
|
}
|
|
}
|