r2mods/ilspy_dump/ror2_csproj/RoR2.Orbs/VoidLightningOrb.cs

96 lines
2.2 KiB
C#

using UnityEngine;
namespace RoR2.Orbs;
public class VoidLightningOrb : Orb, IOrbFixedUpdateBehavior
{
public float damageValue;
public GameObject attacker;
public GameObject inflictor;
public int totalStrikes;
public float secondsPerStrike = 0.5f;
public TeamIndex teamIndex;
public bool isCrit;
public ProcChainMask procChainMask;
public float procCoefficient = 1f;
public DamageColorIndex damageColorIndex;
public DamageTypeCombo damageType = DamageType.Generic;
private GameObject effectPrefab;
private float accumulatedTime;
public override void Begin()
{
accumulatedTime = 0f;
base.duration = (float)(totalStrikes - 1) * secondsPerStrike;
effectPrefab = OrbStorageUtility.Get("Prefabs/Effects/OrbEffects/VoidLightningOrbEffect");
Strike();
}
public override void OnArrival()
{
}
public void FixedUpdate()
{
accumulatedTime += Time.fixedDeltaTime;
while (accumulatedTime > secondsPerStrike)
{
accumulatedTime -= secondsPerStrike;
if ((bool)target)
{
origin = target.transform.position;
Strike();
}
}
}
private void Strike()
{
if (!target)
{
return;
}
HealthComponent healthComponent = target.healthComponent;
if ((bool)healthComponent)
{
DamageInfo damageInfo = new DamageInfo();
damageInfo.damage = damageValue;
damageInfo.attacker = attacker;
damageInfo.inflictor = inflictor;
damageInfo.force = Vector3.zero;
damageInfo.crit = isCrit;
damageInfo.procChainMask = procChainMask;
damageInfo.procCoefficient = procCoefficient;
damageInfo.position = target.transform.position;
damageInfo.damageColorIndex = damageColorIndex;
damageInfo.damageType = damageType;
healthComponent.TakeDamage(damageInfo);
GlobalEventManager.instance.OnHitEnemy(damageInfo, healthComponent.gameObject);
GlobalEventManager.instance.OnHitAll(damageInfo, healthComponent.gameObject);
if ((bool)target.hurtBoxGroup)
{
target = target.hurtBoxGroup.hurtBoxes[Random.Range(0, target.hurtBoxGroup.hurtBoxes.Length)];
}
EffectData effectData = new EffectData
{
origin = origin,
genericFloat = 0.1f
};
effectData.SetHurtBoxReference(target);
EffectManager.SpawnEffect(effectPrefab, effectData, transmit: true);
}
}
}