using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Robust.Client.GameObjects; using Robust.Shared.Timing; namespace Content.Client.Movement.Systems; /// /// Controls the switching of motion and standing still animation /// public sealed class ClientSpriteMovementSystem : SharedSpriteMovementSystem { [Dependency] private readonly IGameTiming _timing = default!; private EntityQuery _spriteQuery; public override void Initialize() { base.Initialize(); _spriteQuery = GetEntityQuery(); SubscribeLocalEvent(OnAfterAutoHandleState); } private void OnAfterAutoHandleState(Entity ent, ref AfterAutoHandleStateEvent args) { if (!_spriteQuery.TryGetComponent(ent, out var sprite)) return; if (ent.Comp.IsMoving) { foreach (var (layer, state) in ent.Comp.MovementLayers) { sprite.LayerSetData(layer, state); } } else { foreach (var (layer, state) in ent.Comp.NoMovementLayers) { sprite.LayerSetData(layer, state); } } } }