var animationPlayer = EnsureComp<AnimationPlayerComponent>(uid);
+ jittering.StartOffset = sprite.Offset;
_animationPlayer.Play(uid, animationPlayer, GetAnimation(jittering, sprite), _jitterAnimationKey);
}
_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)
KeyFrames =
{
new AnimationTrackProperty.KeyFrame(sprite.Offset, 0f),
- new AnimationTrackProperty.KeyFrame(offset, length),
+ new AnimationTrackProperty.KeyFrame(jittering.StartOffset + offset, length),
}
}
}
using Robust.Shared.Containers;
using Robust.Shared.Timing;
using System.Linq;
+using Content.Server.Jittering;
+using Content.Shared.Jittering;
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);
}
}
+ 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))
[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;
}