r2mods/ilspy_dump/ror2_csproj/EntityStates.DroneWeaponsCh.../FireChainGun.cs

126 lines
3.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using RoR2;
using RoR2.Orbs;
using UnityEngine;
namespace EntityStates.DroneWeaponsChainGun;
public class FireChainGun : BaseDroneWeaponChainGunState
{
[SerializeField]
public float baseDuration;
[SerializeField]
public GameObject orbEffectObject;
[SerializeField]
public float damageCoefficient;
[SerializeField]
public float orbSpeed;
[SerializeField]
public int shotCount;
[SerializeField]
public float procCoefficient;
[SerializeField]
public int additionalBounces;
[SerializeField]
public float bounceRange;
[SerializeField]
public float damageCoefficientPerBounce;
[SerializeField]
public int targetsToFindPerBounce;
[SerializeField]
public bool canBounceOnSameTarget;
[SerializeField]
public string muzzleName;
[SerializeField]
public GameObject muzzleFlashPrefab;
[SerializeField]
public string fireSoundString;
private HurtBox targetHurtBox;
private float duration;
private int stepIndex;
public FireChainGun()
{
}
public FireChainGun(HurtBox targetHurtBox)
{
this.targetHurtBox = targetHurtBox;
}
public override void OnEnter()
{
base.OnEnter();
Transform transform = FindChild(muzzleName);
if (!transform)
{
transform = body.coreTransform;
}
if (base.isAuthority)
{
duration = baseDuration / body.attackSpeed;
ChainGunOrb chainGunOrb = new ChainGunOrb(orbEffectObject);
chainGunOrb.damageValue = body.damage * damageCoefficient;
chainGunOrb.isCrit = Util.CheckRoll(body.crit, body.master);
chainGunOrb.teamIndex = TeamComponent.GetObjectTeam(body.gameObject);
chainGunOrb.attacker = body.gameObject;
chainGunOrb.procCoefficient = procCoefficient;
chainGunOrb.procChainMask = default(ProcChainMask);
chainGunOrb.origin = transform.position;
chainGunOrb.target = targetHurtBox;
chainGunOrb.speed = orbSpeed;
chainGunOrb.bouncesRemaining = additionalBounces;
chainGunOrb.bounceRange = bounceRange;
chainGunOrb.damageCoefficientPerBounce = damageCoefficientPerBounce;
chainGunOrb.targetsToFindPerBounce = targetsToFindPerBounce;
chainGunOrb.canBounceOnSameTarget = canBounceOnSameTarget;
chainGunOrb.damageColorIndex = DamageColorIndex.Item;
OrbManager.instance.AddOrb(chainGunOrb);
}
if ((bool)transform)
{
EffectData effectData = new EffectData
{
origin = transform.position
};
EffectManager.SpawnEffect(muzzleFlashPrefab, effectData, transmit: true);
}
Util.PlaySound(fireSoundString, base.gameObject);
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (base.isAuthority && base.fixedAge > duration)
{
BaseDroneWeaponChainGunState baseDroneWeaponChainGunState;
if (stepIndex < shotCount)
{
baseDroneWeaponChainGunState = new FireChainGun(targetHurtBox);
(baseDroneWeaponChainGunState as FireChainGun).stepIndex = stepIndex + 1;
}
else
{
baseDroneWeaponChainGunState = new AimChainGun();
}
baseDroneWeaponChainGunState.PassDisplayLinks(gunChildLocators, gunAnimators);
outer.SetNextState(baseDroneWeaponChainGunState);
}
}
}