1
0

CargoSystem.Telepad.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Content.Shared.Cargo;
  2. using Content.Shared.Cargo.Components;
  3. using JetBrains.Annotations;
  4. using Robust.Client.Animations;
  5. using Robust.Client.GameObjects;
  6. using Robust.Client.Graphics;
  7. namespace Content.Client.Cargo.Systems;
  8. public sealed partial class CargoSystem
  9. {
  10. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  11. private static readonly Animation CargoTelepadBeamAnimation = new()
  12. {
  13. Length = TimeSpan.FromSeconds(0.5),
  14. AnimationTracks =
  15. {
  16. new AnimationTrackSpriteFlick
  17. {
  18. LayerKey = CargoTelepadLayers.Beam,
  19. KeyFrames =
  20. {
  21. new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("beam"), 0f)
  22. }
  23. }
  24. }
  25. };
  26. private static readonly Animation CargoTelepadIdleAnimation = new()
  27. {
  28. Length = TimeSpan.FromSeconds(0.8),
  29. AnimationTracks =
  30. {
  31. new AnimationTrackSpriteFlick
  32. {
  33. LayerKey = CargoTelepadLayers.Beam,
  34. KeyFrames =
  35. {
  36. new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("idle"), 0f)
  37. }
  38. }
  39. }
  40. };
  41. private const string TelepadBeamKey = "cargo-telepad-beam";
  42. private const string TelepadIdleKey = "cargo-telepad-idle";
  43. private void InitializeCargoTelepad()
  44. {
  45. SubscribeLocalEvent<CargoTelepadComponent, AppearanceChangeEvent>(OnCargoAppChange);
  46. SubscribeLocalEvent<CargoTelepadComponent, AnimationCompletedEvent>(OnCargoAnimComplete);
  47. }
  48. private void OnCargoAppChange(EntityUid uid, CargoTelepadComponent component, ref AppearanceChangeEvent args)
  49. {
  50. OnChangeData(uid, args.Sprite);
  51. }
  52. private void OnCargoAnimComplete(EntityUid uid, CargoTelepadComponent component, AnimationCompletedEvent args)
  53. {
  54. OnChangeData(uid);
  55. }
  56. private void OnChangeData(EntityUid uid, SpriteComponent? sprite = null)
  57. {
  58. if (!Resolve(uid, ref sprite))
  59. return;
  60. _appearance.TryGetData<CargoTelepadState?>(uid, CargoTelepadVisuals.State, out var state);
  61. AnimationPlayerComponent? player = null;
  62. switch (state)
  63. {
  64. case CargoTelepadState.Teleporting:
  65. if (_player.HasRunningAnimation(uid, TelepadBeamKey))
  66. return;
  67. _player.Stop(uid, player, TelepadIdleKey);
  68. _player.Play(uid, player, CargoTelepadBeamAnimation, TelepadBeamKey);
  69. break;
  70. case CargoTelepadState.Unpowered:
  71. sprite.LayerSetVisible(CargoTelepadLayers.Beam, false);
  72. _player.Stop(uid, player, TelepadBeamKey);
  73. _player.Stop(uid, player, TelepadIdleKey);
  74. break;
  75. default:
  76. sprite.LayerSetVisible(CargoTelepadLayers.Beam, true);
  77. if (_player.HasRunningAnimation(uid, player, TelepadIdleKey) ||
  78. _player.HasRunningAnimation(uid, player, TelepadBeamKey))
  79. return;
  80. _player.Play(uid, player, CargoTelepadIdleAnimation, TelepadIdleKey);
  81. break;
  82. }
  83. }
  84. [UsedImplicitly]
  85. private enum CargoTelepadLayers : byte
  86. {
  87. Base = 0,
  88. Beam = 1,
  89. }
  90. }