TeslaEnergyBallSystem.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using Content.Server.Administration.Logs;
  2. using Content.Server.Singularity.Components;
  3. using Content.Server.Tesla.Components;
  4. using Content.Shared.Database;
  5. using Content.Shared.Singularity.Components;
  6. using Content.Shared.Mind.Components;
  7. using Content.Shared.Tag;
  8. using Robust.Shared.Physics.Events;
  9. using Content.Server.Lightning.Components;
  10. using Robust.Server.Audio;
  11. using Content.Server.Singularity.Events;
  12. namespace Content.Server.Tesla.EntitySystems;
  13. /// <summary>
  14. /// 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.
  15. /// </summary>
  16. public sealed class TeslaEnergyBallSystem : EntitySystem
  17. {
  18. [Dependency] private readonly AudioSystem _audio = default!;
  19. public override void Initialize()
  20. {
  21. base.Initialize();
  22. SubscribeLocalEvent<TeslaEnergyBallComponent, EntityConsumedByEventHorizonEvent>(OnConsumed);
  23. }
  24. private void OnConsumed(Entity<TeslaEnergyBallComponent> tesla, ref EntityConsumedByEventHorizonEvent args)
  25. {
  26. Spawn(tesla.Comp.ConsumeEffectProto, Transform(args.Entity).Coordinates);
  27. if (TryComp<SinguloFoodComponent>(args.Entity, out var singuloFood))
  28. {
  29. AdjustEnergy(tesla, tesla.Comp, singuloFood.Energy);
  30. } else
  31. {
  32. AdjustEnergy(tesla, tesla.Comp, tesla.Comp.ConsumeStuffEnergy);
  33. }
  34. }
  35. public void AdjustEnergy(EntityUid uid, TeslaEnergyBallComponent component, float delta)
  36. {
  37. component.Energy += delta;
  38. if (component.Energy > component.NeedEnergyToSpawn)
  39. {
  40. component.Energy -= component.NeedEnergyToSpawn;
  41. Spawn(component.SpawnProto, Transform(uid).Coordinates);
  42. }
  43. if (component.Energy < component.EnergyToDespawn)
  44. {
  45. _audio.PlayPvs(component.SoundCollapse, uid);
  46. QueueDel(uid);
  47. }
  48. }
  49. }