LandMineSystem.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Content.Server.Explosion.EntitySystems;
  2. using Content.Shared.Popups;
  3. using Content.Shared.StepTrigger.Systems;
  4. using Robust.Shared.Audio;
  5. using Robust.Shared.Audio.Systems;
  6. namespace Content.Server.LandMines;
  7. public sealed class LandMineSystem : EntitySystem
  8. {
  9. [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
  10. [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
  11. [Dependency] private readonly TriggerSystem _trigger = default!;
  12. public override void Initialize()
  13. {
  14. SubscribeLocalEvent<LandMineComponent, StepTriggeredOnEvent>(HandleStepOnTriggered);
  15. SubscribeLocalEvent<LandMineComponent, StepTriggeredOffEvent>(HandleStepOffTriggered);
  16. SubscribeLocalEvent<LandMineComponent, StepTriggerAttemptEvent>(HandleStepTriggerAttempt);
  17. }
  18. private void HandleStepOnTriggered(EntityUid uid, LandMineComponent component, ref StepTriggeredOnEvent args)
  19. {
  20. _popupSystem.PopupCoordinates(
  21. Loc.GetString("land-mine-triggered", ("mine", uid)),
  22. Transform(uid).Coordinates,
  23. args.Tripper,
  24. PopupType.LargeCaution);
  25. _audioSystem.PlayPvs(component.Sound, uid);
  26. }
  27. private void HandleStepOffTriggered(EntityUid uid, LandMineComponent component, ref StepTriggeredOffEvent args)
  28. {
  29. _trigger.Trigger(uid, args.Tripper);
  30. }
  31. private static void HandleStepTriggerAttempt(EntityUid uid, LandMineComponent component, ref StepTriggerAttemptEvent args)
  32. {
  33. args.Continue = true;
  34. }
  35. }