MechSoundboardSystem.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System.Linq;
  2. using Content.Shared.Mech.Equipment.Components;
  3. using Content.Shared.Timing;
  4. using Robust.Shared.Audio.Systems;
  5. namespace Content.Shared.Mech.Equipment.Systems;
  6. /// <summary>
  7. /// Handles everything for mech soundboard.
  8. /// </summary>
  9. public sealed class MechSoundboardSystem : EntitySystem
  10. {
  11. [Dependency] private readonly SharedAudioSystem _audio = default!;
  12. [Dependency] private readonly UseDelaySystem _useDelay = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<MechSoundboardComponent, MechEquipmentUiStateReadyEvent>(OnUiStateReady);
  17. SubscribeLocalEvent<MechSoundboardComponent, MechEquipmentUiMessageRelayEvent>(OnSoundboardMessage);
  18. }
  19. private void OnUiStateReady(EntityUid uid, MechSoundboardComponent comp, MechEquipmentUiStateReadyEvent args)
  20. {
  21. // you have to specify a collection so it must exist probably
  22. var sounds = comp.Sounds.Select(sound => sound.Collection!);
  23. var state = new MechSoundboardUiState
  24. {
  25. Sounds = sounds.ToList()
  26. };
  27. args.States.Add(GetNetEntity(uid), state);
  28. }
  29. private void OnSoundboardMessage(EntityUid uid, MechSoundboardComponent comp, MechEquipmentUiMessageRelayEvent args)
  30. {
  31. if (args.Message is not MechSoundboardPlayMessage msg)
  32. return;
  33. if (!TryComp<MechEquipmentComponent>(uid, out var equipment) ||
  34. equipment.EquipmentOwner == null)
  35. return;
  36. if (msg.Sound >= comp.Sounds.Count)
  37. return;
  38. if (TryComp(uid, out UseDelayComponent? useDelay)
  39. && !_useDelay.TryResetDelay((uid, useDelay), true))
  40. return;
  41. // honk!!!!!
  42. _audio.PlayPvs(comp.Sounds[msg.Sound], uid);
  43. }
  44. }