SalvageSystem.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Content.Client.Audio;
  2. using Content.Shared.Salvage;
  3. using Content.Shared.Salvage.Expeditions;
  4. using Robust.Client.Player;
  5. using Robust.Shared.GameStates;
  6. namespace Content.Client.Salvage;
  7. public sealed class SalvageSystem : SharedSalvageSystem
  8. {
  9. [Dependency] private readonly IPlayerManager _playerManager = default!;
  10. [Dependency] private readonly ContentAudioSystem _audio = default!;
  11. public override void Initialize()
  12. {
  13. base.Initialize();
  14. SubscribeLocalEvent<PlayAmbientMusicEvent>(OnPlayAmbientMusic);
  15. SubscribeLocalEvent<SalvageExpeditionComponent, ComponentHandleState>(OnExpeditionHandleState);
  16. }
  17. private void OnExpeditionHandleState(EntityUid uid, SalvageExpeditionComponent component, ref ComponentHandleState args)
  18. {
  19. if (args.Current is not SalvageExpeditionComponentState state)
  20. return;
  21. component.Stage = state.Stage;
  22. if (component.Stage >= ExpeditionStage.MusicCountdown)
  23. {
  24. _audio.DisableAmbientMusic();
  25. }
  26. }
  27. private void OnPlayAmbientMusic(ref PlayAmbientMusicEvent ev)
  28. {
  29. if (ev.Cancelled)
  30. return;
  31. var player = _playerManager.LocalEntity;
  32. if (!TryComp(player, out TransformComponent? xform) ||
  33. !TryComp<SalvageExpeditionComponent>(xform.MapUid, out var expedition) ||
  34. expedition.Stage < ExpeditionStage.MusicCountdown)
  35. {
  36. return;
  37. }
  38. ev.Cancelled = true;
  39. }
  40. }