PlaySound.cs 1.1 KB

123456789101112131415161718192021222324252627282930
  1. using Content.Shared.Construction;
  2. using JetBrains.Annotations;
  3. using Robust.Shared.Audio;
  4. using Robust.Shared.Audio.Systems;
  5. using Robust.Shared.Random;
  6. namespace Content.Server.Construction.Completions
  7. {
  8. [UsedImplicitly]
  9. [DataDefinition]
  10. public sealed partial class PlaySound : IGraphAction
  11. {
  12. [DataField("sound", required: true)] public SoundSpecifier Sound { get; private set; } = default!;
  13. [DataField("AudioParams")]
  14. public AudioParams AudioParams = AudioParams.Default;
  15. [ViewVariables(VVAccess.ReadWrite)]
  16. [DataField("variation")]
  17. public float Variation = 0.125f;
  18. public void PerformAction(EntityUid uid, EntityUid? userUid, IEntityManager entityManager)
  19. {
  20. var scale = (float) IoCManager.Resolve<IRobustRandom>().NextGaussian(1, Variation);
  21. if (entityManager.TryGetComponent<TransformComponent>(uid, out var xform))
  22. entityManager.EntitySysManager.GetEntitySystem<SharedAudioSystem>()
  23. .PlayPvs(Sound, xform.Coordinates, AudioParams.WithPitchScale(scale));
  24. }
  25. }
  26. }