r2mods/ilspy_dump/ror2_csproj/EntityStates.QuestVolatileB.../CountDown.cs

109 lines
3.0 KiB
C#

using System;
using System.Collections.Generic;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;
namespace EntityStates.QuestVolatileBattery;
public class CountDown : QuestVolatileBatteryBaseState
{
public static float duration;
public static GameObject vfxPrefab;
public static float explosionRadius;
public static GameObject explosionEffectPrefab;
private GameObject[] vfxInstances = Array.Empty<GameObject>();
private bool detonated;
public override void OnEnter()
{
base.OnEnter();
if (!vfxPrefab || !base.attachedCharacterModel)
{
return;
}
List<GameObject> equipmentDisplayObjects = base.attachedCharacterModel.GetEquipmentDisplayObjects(RoR2Content.Equipment.QuestVolatileBattery.equipmentIndex);
if (equipmentDisplayObjects.Count > 0)
{
vfxInstances = new GameObject[equipmentDisplayObjects.Count];
for (int i = 0; i < vfxInstances.Length; i++)
{
GameObject gameObject = UnityEngine.Object.Instantiate(vfxPrefab, equipmentDisplayObjects[i].transform);
gameObject.transform.localPosition = Vector3.zero;
gameObject.transform.localRotation = Quaternion.identity;
vfxInstances[i] = gameObject;
}
}
}
public override void OnExit()
{
GameObject[] array = vfxInstances;
for (int i = 0; i < array.Length; i++)
{
EntityState.Destroy(array[i]);
}
vfxInstances = Array.Empty<GameObject>();
base.OnExit();
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (NetworkServer.active)
{
FixedUpdateServer();
}
}
private void FixedUpdateServer()
{
if (base.fixedAge >= duration && !detonated)
{
detonated = true;
Detonate();
}
}
public void Detonate()
{
if ((bool)base.networkedBodyAttachment.attachedBody)
{
Vector3 corePosition = base.networkedBodyAttachment.attachedBody.corePosition;
float baseDamage = 0f;
if ((bool)base.attachedHealthComponent)
{
baseDamage = base.attachedHealthComponent.fullCombinedHealth * 3f;
}
EffectManager.SpawnEffect(explosionEffectPrefab, new EffectData
{
origin = corePosition,
scale = explosionRadius
}, transmit: true);
BlastAttack blastAttack = new BlastAttack();
blastAttack.position = corePosition + UnityEngine.Random.onUnitSphere;
blastAttack.radius = explosionRadius;
blastAttack.falloffModel = BlastAttack.FalloffModel.None;
blastAttack.attacker = base.networkedBodyAttachment.attachedBodyObject;
blastAttack.inflictor = base.networkedBodyAttachment.gameObject;
blastAttack.damageColorIndex = DamageColorIndex.Item;
blastAttack.baseDamage = baseDamage;
blastAttack.baseForce = 5000f;
blastAttack.bonusForce = Vector3.zero;
blastAttack.attackerFiltering = AttackerFiltering.AlwaysHit;
blastAttack.crit = false;
blastAttack.procChainMask = default(ProcChainMask);
blastAttack.procCoefficient = 0f;
blastAttack.teamIndex = base.networkedBodyAttachment.attachedBody.teamComponent.teamIndex;
blastAttack.Fire();
base.networkedBodyAttachment.attachedBody.inventory.SetEquipmentIndex(EquipmentIndex.None);
outer.SetNextState(new Idle());
}
}
}