1
0

STLaySystem.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using Content.Server._Stalker.Lay.Events;
  2. using Content.Server.DoAfter;
  3. using Content.Shared._Stalker.Lay;
  4. using Content.Shared._Stalker.Lay.Events;
  5. using Content.Shared.DoAfter;
  6. namespace Content.Server._Stalker.Lay;
  7. public sealed partial class STLaySystem : EntitySystem
  8. {
  9. [Dependency] private readonly DoAfterSystem _doAfter = default!;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. InitializeLaid();
  14. InitializeHandle();
  15. SubscribeLocalEvent<STLayComponent, STLayDoAfterEvent>(OnStateDoAfter);
  16. SubscribeLocalEvent<STLayComponent, STLayStateChangedEvent>(OnStateChanged);
  17. }
  18. private void OnStateDoAfter(Entity<STLayComponent> lay, ref STLayDoAfterEvent args)
  19. {
  20. if (args.Cancelled)
  21. return;
  22. SetState(lay, args.NextState);
  23. }
  24. private void OnStateChanged(Entity<STLayComponent> lay, ref STLayStateChangedEvent args)
  25. {
  26. switch (args.State)
  27. {
  28. case STLayState.Stand:
  29. RemComp<STLaidComponent>(lay);
  30. break;
  31. case STLayState.Laid:
  32. AddComp<STLaidComponent>(lay);
  33. break;
  34. default:
  35. throw new ArgumentOutOfRangeException();
  36. }
  37. }
  38. private void StartSetState(Entity<STLayComponent> lay, STLayState state)
  39. {
  40. var delay = lay.Comp.ChangeStateDelay[state];
  41. if (delay == TimeSpan.Zero)
  42. {
  43. SetState(lay, state);
  44. return;
  45. }
  46. var args = new DoAfterArgs(EntityManager, lay, delay, new STLayDoAfterEvent(state), lay)
  47. {
  48. NeedHand = true,
  49. BreakOnHandChange = false,
  50. BreakOnMove = true,
  51. CancelDuplicate = false,
  52. };
  53. _doAfter.TryStartDoAfter(args);
  54. }
  55. private void SetState(Entity<STLayComponent> lay, STLayState state)
  56. {
  57. lay.Comp.State = state;
  58. var ev = new STLayStateChangedEvent(state);
  59. RaiseLocalEvent(lay, ev);
  60. }
  61. }