PuddleCreateAnomalySystem.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Content.Server.Anomaly.Components;
  2. using Content.Shared.Chemistry.EntitySystems;
  3. using Content.Server.Fluids.EntitySystems;
  4. using Content.Shared.Anomaly.Components;
  5. namespace Content.Server.Anomaly.Effects;
  6. /// <summary>
  7. /// This component allows the anomaly to create puddles from SolutionContainer.
  8. /// </summary>
  9. public sealed class PuddleCreateAnomalySystem : EntitySystem
  10. {
  11. [Dependency] private readonly PuddleSystem _puddle = default!;
  12. [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
  13. public override void Initialize()
  14. {
  15. SubscribeLocalEvent<PuddleCreateAnomalyComponent, AnomalyPulseEvent>(OnPulse);
  16. SubscribeLocalEvent<PuddleCreateAnomalyComponent, AnomalySupercriticalEvent>(OnSupercritical, before: new[] { typeof(InjectionAnomalySystem) });
  17. }
  18. private void OnPulse(Entity<PuddleCreateAnomalyComponent> entity, ref AnomalyPulseEvent args)
  19. {
  20. if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out var sol, out _))
  21. return;
  22. var xform = Transform(entity.Owner);
  23. var puddleSol = _solutionContainer.SplitSolution(sol.Value, entity.Comp.MaxPuddleSize * args.Severity * args.PowerModifier);
  24. _puddle.TrySplashSpillAt(entity.Owner, xform.Coordinates, puddleSol, out _);
  25. }
  26. private void OnSupercritical(Entity<PuddleCreateAnomalyComponent> entity, ref AnomalySupercriticalEvent args)
  27. {
  28. if (!_solutionContainer.TryGetSolution(entity.Owner, entity.Comp.Solution, out _, out var sol))
  29. return;
  30. var xform = Transform(entity.Owner);
  31. _puddle.TrySpillAt(xform.Coordinates, sol, out _);
  32. }
  33. }