ToolSystem.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Content.Server.Atmos.EntitySystems;
  2. using Content.Shared.Chemistry.Components.SolutionManager;
  3. using Content.Shared.FixedPoint;
  4. using Content.Shared.Tools.Components;
  5. using Robust.Server.GameObjects;
  6. using SharedToolSystem = Content.Shared.Tools.Systems.SharedToolSystem;
  7. namespace Content.Server.Tools;
  8. public sealed class ToolSystem : SharedToolSystem
  9. {
  10. [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!;
  11. [Dependency] private readonly TransformSystem _transformSystem = default!;
  12. public override void TurnOn(Entity<WelderComponent> entity, EntityUid? user)
  13. {
  14. base.TurnOn(entity, user);
  15. var xform = Transform(entity);
  16. if (xform.GridUid is { } gridUid)
  17. {
  18. var position = _transformSystem.GetGridOrMapTilePosition(entity.Owner, xform);
  19. _atmosphereSystem.HotspotExpose(gridUid, position, 700, 50, entity.Owner, true);
  20. }
  21. }
  22. public override void Update(float frameTime)
  23. {
  24. base.Update(frameTime);
  25. UpdateWelders(frameTime);
  26. }
  27. //todo move to shared once you can remove reagents from shared without it freaking out.
  28. private void UpdateWelders(float frameTime)
  29. {
  30. var query = EntityQueryEnumerator<WelderComponent, SolutionContainerManagerComponent>();
  31. while (query.MoveNext(out var uid, out var welder, out var solutionContainer))
  32. {
  33. if (!welder.Enabled)
  34. continue;
  35. welder.WelderTimer += frameTime;
  36. if (welder.WelderTimer < welder.WelderUpdateTimer)
  37. continue;
  38. if (!SolutionContainerSystem.TryGetSolution((uid, solutionContainer), welder.FuelSolutionName, out var solutionComp, out var solution))
  39. continue;
  40. SolutionContainerSystem.RemoveReagent(solutionComp.Value, welder.FuelReagent, welder.FuelConsumption * welder.WelderTimer);
  41. if (solution.GetTotalPrototypeQuantity(welder.FuelReagent) <= FixedPoint2.Zero)
  42. {
  43. ItemToggle.Toggle(uid, predicted: false);
  44. }
  45. Dirty(uid, welder);
  46. welder.WelderTimer -= welder.WelderUpdateTimer;
  47. }
  48. }
  49. }