GravityAnomalySystem.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Content.Server.Physics.Components;
  2. using Content.Server.Singularity.Components;
  3. using Content.Shared.Anomaly.Components;
  4. using Content.Shared.Anomaly.Effects;
  5. using Content.Shared.Anomaly.Effects.Components;
  6. using Content.Shared.Radiation.Components;
  7. namespace Content.Server.Anomaly.Effects;
  8. /// <summary>
  9. /// This handles logic and events relating to <see cref="GravityAnomalyComponent"/> and <seealso cref="AnomalySystem"/>
  10. /// </summary>
  11. public sealed class GravityAnomalySystem : SharedGravityAnomalySystem
  12. {
  13. /// <inheritdoc/>
  14. public override void Initialize()
  15. {
  16. base.Initialize();
  17. SubscribeLocalEvent<GravityAnomalyComponent, AnomalySeverityChangedEvent>(OnSeverityChanged);
  18. SubscribeLocalEvent<GravityAnomalyComponent, AnomalyStabilityChangedEvent>(OnStabilityChanged);
  19. }
  20. private void OnSeverityChanged(Entity<GravityAnomalyComponent> anomaly, ref AnomalySeverityChangedEvent args)
  21. {
  22. if (TryComp<RadiationSourceComponent>(anomaly, out var radSource))
  23. radSource.Intensity = anomaly.Comp.MaxRadiationIntensity * args.Severity;
  24. if (TryComp<GravityWellComponent>(anomaly, out var gravityWell))
  25. {
  26. var accel = MathHelper.Lerp(anomaly.Comp.MinAccel, anomaly.Comp.MaxAccel, args.Severity);
  27. gravityWell.BaseRadialAcceleration = accel;
  28. var radialAccel = MathHelper.Lerp(anomaly.Comp.MinRadialAccel, anomaly.Comp.MaxRadialAccel, args.Severity);
  29. gravityWell.BaseTangentialAcceleration = radialAccel;
  30. }
  31. if (TryComp<RandomWalkComponent>(anomaly, out var randomWalk))
  32. {
  33. var speed = MathHelper.Lerp(anomaly.Comp.MinSpeed, anomaly.Comp.MaxSpeed, args.Severity);
  34. randomWalk.MinSpeed = speed - anomaly.Comp.SpeedVariation;
  35. randomWalk.MaxSpeed = speed + anomaly.Comp.SpeedVariation;
  36. }
  37. }
  38. private void OnStabilityChanged(Entity<GravityAnomalyComponent> anomaly, ref AnomalyStabilityChangedEvent args)
  39. {
  40. if (TryComp<GravityWellComponent>(anomaly, out var gravityWell))
  41. gravityWell.MaxRange = anomaly.Comp.MaxGravityWellRange * args.Stability;
  42. }
  43. }