diff --git a/Content.Client/Jittering/JitteringSystem.cs b/Content.Client/Jittering/JitteringSystem.cs index 079fd60a46..185bd490d3 100644 --- a/Content.Client/Jittering/JitteringSystem.cs +++ b/Content.Client/Jittering/JitteringSystem.cs @@ -30,6 +30,7 @@ namespace Content.Client.Jittering var animationPlayer = EnsureComp(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), } } } diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index e4766b4ab9..acb6116e9a 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -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(OnActiveGrinderStart); + SubscribeLocalEvent(OnActiveGrinderRemove); SubscribeLocalEvent((uid, _, _) => UpdateUiState(uid)); SubscribeLocalEvent((EntityUid uid, ReagentGrinderComponent _, ref PowerChangedEvent _) => UpdateUiState(uid)); SubscribeLocalEvent(OnInteractUsing); @@ -119,6 +124,16 @@ namespace Content.Server.Kitchen.EntitySystems } } + private void OnActiveGrinderStart(Entity ent, ref ComponentStartup args) + { + _jitter.AddJitter(ent, -10, 100); + } + + private void OnActiveGrinderRemove(Entity ent, ref ComponentRemove args) + { + RemComp(ent); + } + private void OnEntRemoveAttempt(Entity entity, ref ContainerIsRemovingAttemptEvent args) { if (HasComp(entity)) diff --git a/Content.Shared/Jittering/JitteringComponent.cs b/Content.Shared/Jittering/JitteringComponent.cs index 237629f291..417b42e895 100644 --- a/Content.Shared/Jittering/JitteringComponent.cs +++ b/Content.Shared/Jittering/JitteringComponent.cs @@ -17,4 +17,11 @@ public sealed partial class JitteringComponent : Component [ViewVariables(VVAccess.ReadWrite)] public Vector2 LastJitter { get; set; } + + /// + /// The offset that an entity had before jittering started, + /// so that we can reset it properly. + /// + [ViewVariables(VVAccess.ReadWrite)] + public Vector2 StartOffset = Vector2.Zero; }