VaporVisualizerSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Content.Shared.Vapor;
  2. using Robust.Client.Animations;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Chemistry.Visualizers;
  5. /// <summary>
  6. /// Handles vapor playing the 'being sprayed' animation if necessary.
  7. /// </summary>
  8. public sealed class VaporVisualizerSystem : VisualizerSystem<VaporVisualsComponent>
  9. {
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<VaporVisualsComponent, ComponentInit>(OnComponentInit);
  14. }
  15. /// <summary>
  16. /// Constructs the 'being sprayed' animation for the vapor entity.
  17. /// </summary>
  18. private void OnComponentInit(EntityUid uid, VaporVisualsComponent comp, ComponentInit args)
  19. {
  20. comp.VaporFlick = new Animation()
  21. {
  22. Length = TimeSpan.FromSeconds(comp.AnimationTime),
  23. AnimationTracks =
  24. {
  25. new AnimationTrackSpriteFlick()
  26. {
  27. LayerKey = VaporVisualLayers.Base,
  28. KeyFrames =
  29. {
  30. new AnimationTrackSpriteFlick.KeyFrame(comp.AnimationState, 0f)
  31. }
  32. }
  33. }
  34. };
  35. if (AppearanceSystem.TryGetData<bool>(uid, VaporVisuals.State, out var state) &&
  36. state &&
  37. TryComp<AnimationPlayerComponent>(uid, out var animPlayer) &&
  38. !AnimationSystem.HasRunningAnimation(uid, animPlayer, VaporVisualsComponent.AnimationKey))
  39. {
  40. AnimationSystem.Play(uid, animPlayer, comp.VaporFlick, VaporVisualsComponent.AnimationKey);
  41. }
  42. }
  43. /// <summary>
  44. /// Ensures that the vapor entity plays its 'being sprayed' animation if necessary.
  45. /// </summary>
  46. protected override void OnAppearanceChange(EntityUid uid, VaporVisualsComponent comp, ref AppearanceChangeEvent args)
  47. {
  48. if (AppearanceSystem.TryGetData<Color>(uid, VaporVisuals.Color, out var color, args.Component) && args.Sprite != null)
  49. {
  50. args.Sprite.Color = color;
  51. }
  52. }
  53. }
  54. public enum VaporVisualLayers : byte
  55. {
  56. Base
  57. }