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

61 lines
1.6 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using UnityEngine;
namespace RoR2.Orbs;
public class LightningStrikeOrb : GenericDamageOrb, IOrbFixedUpdateBehavior
{
private Vector3 lastKnownTargetPosition;
private static readonly float positionLockDuration = 0.3f;
public override void Begin()
{
base.Begin();
base.duration = 0.5f;
if ((bool)target)
{
lastKnownTargetPosition = target.transform.position;
}
}
protected override GameObject GetOrbEffect()
{
return OrbStorageUtility.Get("Prefabs/Effects/OrbEffects/LightningStrikeOrbEffect");
}
public override void OnArrival()
{
EffectManager.SpawnEffect(OrbStorageUtility.Get("Prefabs/Effects/ImpactEffects/LightningStrikeImpact"), new EffectData
{
origin = lastKnownTargetPosition
}, transmit: true);
if ((bool)attacker)
{
BlastAttack blastAttack = new BlastAttack();
blastAttack.attacker = attacker;
blastAttack.baseDamage = damageValue;
blastAttack.baseForce = 0f;
blastAttack.bonusForce = Vector3.down * 3000f;
blastAttack.crit = isCrit;
blastAttack.damageColorIndex = DamageColorIndex.Item;
blastAttack.damageType = DamageType.Stun1s;
blastAttack.falloffModel = BlastAttack.FalloffModel.None;
blastAttack.inflictor = null;
blastAttack.position = lastKnownTargetPosition;
blastAttack.procChainMask = procChainMask;
blastAttack.procCoefficient = procCoefficient;
blastAttack.radius = 3f;
blastAttack.teamIndex = TeamComponent.GetObjectTeam(attacker);
blastAttack.Fire();
}
}
public void FixedUpdate()
{
if ((bool)target && base.timeUntilArrival >= positionLockDuration)
{
lastKnownTargetPosition = target.transform.position;
}
}
}