using Content.Server.Administration.Logs;
using Content.Server.Singularity.Components;
using Content.Server.Tesla.Components;
using Content.Shared.Database;
using Content.Shared.Singularity.Components;
using Content.Shared.Mind.Components;
using Content.Shared.Tag;
using Robust.Shared.Physics.Events;
using Content.Server.Lightning.Components;
using Robust.Server.Audio;
using Content.Server.Singularity.Events;
namespace Content.Server.Tesla.EntitySystems;
///
/// A component that tracks an entity's saturation level from absorbing other creatures by touch, and spawns new entities when the saturation limit is reached.
///
public sealed class TeslaEnergyBallSystem : EntitySystem
{
[Dependency] private readonly AudioSystem _audio = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnConsumed);
}
private void OnConsumed(Entity tesla, ref EntityConsumedByEventHorizonEvent args)
{
Spawn(tesla.Comp.ConsumeEffectProto, Transform(args.Entity).Coordinates);
if (TryComp(args.Entity, out var singuloFood))
{
AdjustEnergy(tesla, tesla.Comp, singuloFood.Energy);
} else
{
AdjustEnergy(tesla, tesla.Comp, tesla.Comp.ConsumeStuffEnergy);
}
}
public void AdjustEnergy(EntityUid uid, TeslaEnergyBallComponent component, float delta)
{
component.Energy += delta;
if (component.Energy > component.NeedEnergyToSpawn)
{
component.Energy -= component.NeedEnergyToSpawn;
Spawn(component.SpawnProto, Transform(uid).Coordinates);
}
if (component.Energy < component.EnergyToDespawn)
{
_audio.PlayPvs(component.SoundCollapse, uid);
QueueDel(uid);
}
}
}