1
0

GravityGeneratorSystem.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Content.Server.Power.Components;
  2. using Content.Server.Power.EntitySystems;
  3. using Content.Shared.Gravity;
  4. namespace Content.Server.Gravity;
  5. public sealed class GravityGeneratorSystem : EntitySystem
  6. {
  7. [Dependency] private readonly GravitySystem _gravitySystem = default!;
  8. [Dependency] private readonly SharedPointLightSystem _lights = default!;
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeLocalEvent<GravityGeneratorComponent, EntParentChangedMessage>(OnParentChanged);
  13. SubscribeLocalEvent<GravityGeneratorComponent, ChargedMachineActivatedEvent>(OnActivated);
  14. SubscribeLocalEvent<GravityGeneratorComponent, ChargedMachineDeactivatedEvent>(OnDeactivated);
  15. }
  16. public override void Update(float frameTime)
  17. {
  18. base.Update(frameTime);
  19. var query = EntityQueryEnumerator<GravityGeneratorComponent, PowerChargeComponent>();
  20. while (query.MoveNext(out var uid, out var grav, out var charge))
  21. {
  22. if (!_lights.TryGetLight(uid, out var pointLight))
  23. continue;
  24. _lights.SetEnabled(uid, charge.Charge > 0, pointLight);
  25. _lights.SetRadius(uid, MathHelper.Lerp(grav.LightRadiusMin, grav.LightRadiusMax, charge.Charge),
  26. pointLight);
  27. }
  28. }
  29. private void OnActivated(Entity<GravityGeneratorComponent> ent, ref ChargedMachineActivatedEvent args)
  30. {
  31. ent.Comp.GravityActive = true;
  32. var xform = Transform(ent);
  33. if (TryComp(xform.ParentUid, out GravityComponent? gravity))
  34. {
  35. _gravitySystem.EnableGravity(xform.ParentUid, gravity);
  36. }
  37. }
  38. private void OnDeactivated(Entity<GravityGeneratorComponent> ent, ref ChargedMachineDeactivatedEvent args)
  39. {
  40. ent.Comp.GravityActive = false;
  41. var xform = Transform(ent);
  42. if (TryComp(xform.ParentUid, out GravityComponent? gravity))
  43. {
  44. _gravitySystem.RefreshGravity(xform.ParentUid, gravity);
  45. }
  46. }
  47. private void OnParentChanged(EntityUid uid, GravityGeneratorComponent component, ref EntParentChangedMessage args)
  48. {
  49. if (component.GravityActive && TryComp(args.OldParent, out GravityComponent? gravity))
  50. {
  51. _gravitySystem.RefreshGravity(args.OldParent.Value, gravity);
  52. }
  53. }
  54. }