using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Robust.Client.GameObjects; namespace Content.Client.Nutrition.EntitySystems; public sealed class ClientFoodSequenceSystem : SharedFoodSequenceSystem { public override void Initialize() { SubscribeLocalEvent(OnHandleState); } private void OnHandleState(Entity start, ref AfterAutoHandleStateEvent args) { if (!TryComp(start, out var sprite)) return; UpdateFoodVisuals(start, sprite); } private void UpdateFoodVisuals(Entity start, SpriteComponent? sprite = null) { if (!Resolve(start, ref sprite, false)) return; //Remove old layers foreach (var key in start.Comp.RevealedLayers) { sprite.RemoveLayer(key); } start.Comp.RevealedLayers.Clear(); //Add new layers var counter = 0; foreach (var state in start.Comp.FoodLayers) { if (state.Sprite is null) continue; var keyCode = $"food-layer-{counter}"; start.Comp.RevealedLayers.Add(keyCode); sprite.LayerMapTryGet(start.Comp.TargetLayerMap, out var index); if (start.Comp.InverseLayers) index++; sprite.AddBlankLayer(index); sprite.LayerMapSet(keyCode, index); sprite.LayerSetSprite(index, state.Sprite); sprite.LayerSetScale(index, state.Scale); //Offset the layer var layerPos = start.Comp.StartPosition; layerPos += (start.Comp.Offset * counter) + state.LocalOffset; sprite.LayerSetOffset(index, layerPos); counter++; } } }