CryoPodSystem.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Numerics;
  2. using Content.Shared.Emag.Systems;
  3. using Content.Shared.Medical.Cryogenics;
  4. using Content.Shared.Verbs;
  5. using Robust.Client.GameObjects;
  6. using DrawDepth = Content.Shared.DrawDepth.DrawDepth;
  7. namespace Content.Client.Medical.Cryogenics;
  8. public sealed class CryoPodSystem: SharedCryoPodSystem
  9. {
  10. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  11. public override void Initialize()
  12. {
  13. base.Initialize();
  14. SubscribeLocalEvent<CryoPodComponent, ComponentInit>(OnComponentInit);
  15. SubscribeLocalEvent<CryoPodComponent, GetVerbsEvent<AlternativeVerb>>(AddAlternativeVerbs);
  16. SubscribeLocalEvent<CryoPodComponent, GotEmaggedEvent>(OnEmagged);
  17. SubscribeLocalEvent<CryoPodComponent, CryoPodPryFinished>(OnCryoPodPryFinished);
  18. SubscribeLocalEvent<CryoPodComponent, AppearanceChangeEvent>(OnAppearanceChange);
  19. SubscribeLocalEvent<InsideCryoPodComponent, ComponentStartup>(OnCryoPodInsertion);
  20. SubscribeLocalEvent<InsideCryoPodComponent, ComponentRemove>(OnCryoPodRemoval);
  21. }
  22. private void OnCryoPodInsertion(EntityUid uid, InsideCryoPodComponent component, ComponentStartup args)
  23. {
  24. if (!TryComp<SpriteComponent>(uid, out var spriteComponent))
  25. {
  26. return;
  27. }
  28. component.PreviousOffset = spriteComponent.Offset;
  29. spriteComponent.Offset = new Vector2(0, 1);
  30. }
  31. private void OnCryoPodRemoval(EntityUid uid, InsideCryoPodComponent component, ComponentRemove args)
  32. {
  33. if (!TryComp<SpriteComponent>(uid, out var spriteComponent))
  34. {
  35. return;
  36. }
  37. spriteComponent.Offset = component.PreviousOffset;
  38. }
  39. private void OnAppearanceChange(EntityUid uid, CryoPodComponent component, ref AppearanceChangeEvent args)
  40. {
  41. if (args.Sprite == null)
  42. {
  43. return;
  44. }
  45. if (!_appearance.TryGetData<bool>(uid, CryoPodComponent.CryoPodVisuals.ContainsEntity, out var isOpen, args.Component)
  46. || !_appearance.TryGetData<bool>(uid, CryoPodComponent.CryoPodVisuals.IsOn, out var isOn, args.Component))
  47. {
  48. return;
  49. }
  50. if (isOpen)
  51. {
  52. args.Sprite.LayerSetState(CryoPodVisualLayers.Base, "pod-open");
  53. args.Sprite.LayerSetVisible(CryoPodVisualLayers.Cover, false);
  54. args.Sprite.DrawDepth = (int) DrawDepth.Objects;
  55. }
  56. else
  57. {
  58. args.Sprite.DrawDepth = (int) DrawDepth.Mobs;
  59. args.Sprite.LayerSetState(CryoPodVisualLayers.Base, isOn ? "pod-on" : "pod-off");
  60. args.Sprite.LayerSetState(CryoPodVisualLayers.Cover, isOn ? "cover-on" : "cover-off");
  61. args.Sprite.LayerSetVisible(CryoPodVisualLayers.Cover, true);
  62. }
  63. }
  64. }
  65. public enum CryoPodVisualLayers : byte
  66. {
  67. Base,
  68. Cover,
  69. }