]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Reagent grinder jittering (#24190)
authorKara <lunarautomaton6@gmail.com>
Wed, 17 Jan 2024 13:14:32 +0000 (06:14 -0700)
committerGitHub <noreply@github.com>
Wed, 17 Jan 2024 13:14:32 +0000 (06:14 -0700)
* Reagent grinder jittering

* Fix jittering for offset sprites

Content.Client/Jittering/JitteringSystem.cs
Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs
Content.Shared/Jittering/JitteringComponent.cs

index 079fd60a46d260a75151a9af1cada668afa86c2c..185bd490d3b18f087d2968c0d7b5c3505a7030c7 100644 (file)
@@ -30,6 +30,7 @@ namespace Content.Client.Jittering
 
             var animationPlayer = EnsureComp<AnimationPlayerComponent>(uid);
 
+            jittering.StartOffset = sprite.Offset;
             _animationPlayer.Play(uid, animationPlayer, GetAnimation(jittering, sprite), _jitterAnimationKey);
         }
 
@@ -39,7 +40,7 @@ namespace Content.Client.Jittering
                 _animationPlayer.Stop(uid, animationPlayer, _jitterAnimationKey);
 
             if (TryComp(uid, out SpriteComponent? sprite))
-                sprite.Offset = Vector2.Zero;
+                sprite.Offset = jittering.StartOffset;
         }
 
         private void OnAnimationCompleted(EntityUid uid, JitteringComponent jittering, AnimationCompletedEvent args)
@@ -91,7 +92,7 @@ namespace Content.Client.Jittering
                         KeyFrames =
                         {
                             new AnimationTrackProperty.KeyFrame(sprite.Offset, 0f),
-                            new AnimationTrackProperty.KeyFrame(offset, length),
+                            new AnimationTrackProperty.KeyFrame(jittering.StartOffset + offset, length),
                         }
                     }
                 }
index e4766b4ab953f124f65b7cdbdc457e3bbbdb3365..acb6116e9ae9e7efbe0689768aab9f418e5a7e99 100644 (file)
@@ -20,6 +20,8 @@ using Robust.Shared.Audio.Systems;
 using Robust.Shared.Containers;
 using Robust.Shared.Timing;
 using System.Linq;
+using Content.Server.Jittering;
+using Content.Shared.Jittering;
 
 namespace Content.Server.Kitchen.EntitySystems
 {
@@ -36,11 +38,14 @@ namespace Content.Server.Kitchen.EntitySystems
         [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!;
         [Dependency] private readonly SharedContainerSystem _containerSystem = default!;
         [Dependency] private readonly RandomHelperSystem _randomHelper = default!;
+        [Dependency] private readonly JitteringSystem _jitter = default!;
 
         public override void Initialize()
         {
             base.Initialize();
 
+            SubscribeLocalEvent<ActiveReagentGrinderComponent, ComponentStartup>(OnActiveGrinderStart);
+            SubscribeLocalEvent<ActiveReagentGrinderComponent, ComponentRemove>(OnActiveGrinderRemove);
             SubscribeLocalEvent<ReagentGrinderComponent, ComponentStartup>((uid, _, _) => UpdateUiState(uid));
             SubscribeLocalEvent((EntityUid uid, ReagentGrinderComponent _, ref PowerChangedEvent _) => UpdateUiState(uid));
             SubscribeLocalEvent<ReagentGrinderComponent, InteractUsingEvent>(OnInteractUsing);
@@ -119,6 +124,16 @@ namespace Content.Server.Kitchen.EntitySystems
             }
         }
 
+        private void OnActiveGrinderStart(Entity<ActiveReagentGrinderComponent> ent, ref ComponentStartup args)
+        {
+            _jitter.AddJitter(ent, -10, 100);
+        }
+
+        private void OnActiveGrinderRemove(Entity<ActiveReagentGrinderComponent> ent, ref ComponentRemove args)
+        {
+            RemComp<JitteringComponent>(ent);
+        }
+
         private void OnEntRemoveAttempt(Entity<ReagentGrinderComponent> entity, ref ContainerIsRemovingAttemptEvent args)
         {
             if (HasComp<ActiveReagentGrinderComponent>(entity))
index 237629f291b065e78b93ec41d7ac62f185f87c3e..417b42e895553cfdf3905b46a7a1954b5ecba9d7 100644 (file)
@@ -17,4 +17,11 @@ public sealed partial class JitteringComponent : Component
 
     [ViewVariables(VVAccess.ReadWrite)]
     public Vector2 LastJitter { get; set; }
+
+    /// <summary>
+    ///     The offset that an entity had before jittering started,
+    ///     so that we can reset it properly.
+    /// </summary>
+    [ViewVariables(VVAccess.ReadWrite)]
+    public Vector2 StartOffset = Vector2.Zero;
 }