1
0

MortarSystem.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using Content.Shared._RMC14.Mortar;
  2. using Robust.Client.Animations;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client._RMC14.Mortar;
  5. public sealed class MortarSystem : SharedMortarSystem
  6. {
  7. [Dependency] private readonly AnimationPlayerSystem _animation = default!;
  8. private const string AnimationKey = "rmc_mortar_fire";
  9. public override void Initialize()
  10. {
  11. base.Initialize();
  12. SubscribeAllEvent<MortarFiredEvent>(OnMortarFiredEvent);
  13. SubscribeLocalEvent<MortarComponent, AfterAutoHandleStateEvent>(OnMortarHandleState);
  14. }
  15. private void OnMortarFiredEvent(MortarFiredEvent ev)
  16. {
  17. if (!TryGetEntity(ev.Mortar, out var mortarId) ||
  18. !TryComp(mortarId, out MortarComponent? mortar))
  19. {
  20. return;
  21. }
  22. if (_animation.HasRunningAnimation(mortarId.Value, AnimationKey))
  23. return;
  24. _animation.Play(mortarId.Value,
  25. new Animation
  26. {
  27. Length = mortar.AnimationTime,
  28. AnimationTracks =
  29. {
  30. new AnimationTrackSpriteFlick
  31. {
  32. LayerKey = mortar.AnimationLayer,
  33. KeyFrames =
  34. {
  35. new AnimationTrackSpriteFlick.KeyFrame(mortar.AnimationState, 0f),
  36. new AnimationTrackSpriteFlick.KeyFrame(mortar.DeployedState, 0.3f),
  37. },
  38. },
  39. },
  40. },
  41. AnimationKey);
  42. }
  43. private void OnMortarHandleState(Entity<MortarComponent> mortar, ref AfterAutoHandleStateEvent args)
  44. {
  45. try
  46. {
  47. if (!TryComp(mortar, out UserInterfaceComponent? ui))
  48. return;
  49. foreach (var open in ui.ClientOpenInterfaces.Values)
  50. {
  51. if (open is MortarBui bui)
  52. bui.Refresh();
  53. }
  54. }
  55. catch (Exception e)
  56. {
  57. Log.Error($"Error refreshing {nameof(MortarBui)}:\n{e}");
  58. }
  59. }
  60. }