1
0

AmbientSoundOverlay.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Content.Shared.Audio;
  2. using Robust.Client.Graphics;
  3. using Robust.Shared.Enums;
  4. namespace Content.Client.Audio;
  5. /// <summary>
  6. /// Debug overlay that shows all ambientsound sources in range
  7. /// </summary>
  8. public sealed class AmbientSoundOverlay : Overlay
  9. {
  10. private readonly IEntityManager _entManager;
  11. private readonly AmbientSoundSystem _ambient;
  12. private readonly EntityLookupSystem _lookup;
  13. public override OverlaySpace Space => OverlaySpace.WorldSpace;
  14. public AmbientSoundOverlay(IEntityManager entManager, AmbientSoundSystem ambient, EntityLookupSystem lookup)
  15. {
  16. _entManager = entManager;
  17. _ambient = ambient;
  18. _lookup = lookup;
  19. }
  20. protected override void Draw(in OverlayDrawArgs args)
  21. {
  22. var worldHandle = args.WorldHandle;
  23. var ambientQuery = _entManager.GetEntityQuery<AmbientSoundComponent>();
  24. var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
  25. var xformSystem = _entManager.System<SharedTransformSystem>();
  26. const float Size = 0.25f;
  27. const float Alpha = 0.25f;
  28. foreach (var ent in _lookup.GetEntitiesIntersecting(args.MapId, args.WorldBounds))
  29. {
  30. if (!ambientQuery.TryGetComponent(ent, out var ambientSound) ||
  31. !xformQuery.TryGetComponent(ent, out var xform)) continue;
  32. if (ambientSound.Enabled)
  33. {
  34. if (_ambient.IsActive((ent, ambientSound)))
  35. {
  36. worldHandle.DrawCircle(xformSystem.GetWorldPosition(xform), Size, Color.LightGreen.WithAlpha(Alpha * 2f));
  37. }
  38. else
  39. {
  40. worldHandle.DrawCircle(xformSystem.GetWorldPosition(xform), Size, Color.Orange.WithAlpha(Alpha));
  41. }
  42. }
  43. else
  44. {
  45. worldHandle.DrawCircle(xformSystem.GetWorldPosition(xform), Size, Color.Red.WithAlpha(Alpha));
  46. }
  47. }
  48. }
  49. }