using Content.Server.Chemistry.Components;
using Content.Shared._Goobstation.Weapons.Ranged;
using Content.Shared.Weapons.Ranged.Events;
using Content.Shared.Weapons.Ranged.Systems;
namespace Content.Server._Goobstation.Weapons.Ranged;
///
/// System for handling projectiles and altering their properties when fired from a Syringe Gun.
///
public sealed class SyringeGunSystem : EntitySystem
{
public override void Initialize()
{
SubscribeLocalEvent(OnFire);
SubscribeLocalEvent(OnShootAttempt);
}
private void OnShootAttempt(Entity ent, ref AttemptShootEvent args)
{
args.ThrowItems = true;
}
private void OnFire(Entity gun, ref AmmoShotEvent args)
{
foreach (var projectile in args.FiredProjectiles)
{
if (TryComp(projectile, out SolutionInjectWhileEmbeddedComponent? whileEmbedded))
{
whileEmbedded.Injections = null; // uncap the injection maximum
whileEmbedded.PierceArmorOverride = gun.Comp.PierceArmor;
whileEmbedded.SpeedMultiplier = gun.Comp.InjectionSpeedMultiplier; // store it in the component to reset it
whileEmbedded.UpdateInterval /= whileEmbedded.SpeedMultiplier;
}
if (TryComp(projectile, out SolutionInjectOnEmbedComponent? onEmbed))
onEmbed.PierceArmorOverride = gun.Comp.PierceArmor;
}
}
}