using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Robust.Client.GameObjects; namespace Content.Client.Nutrition.EntitySystems; public sealed class ClientFoodSequenceSystem : SharedFoodSequenceSystem { [Dependency] private readonly SpriteSystem _sprite = default!; 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((start.Owner, sprite), 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.Owner, sprite), start.Comp.TargetLayerMap, out var index, false); if (start.Comp.InverseLayers) index++; _sprite.AddBlankLayer((start.Owner, sprite), index); _sprite.LayerMapSet((start.Owner, sprite), keyCode, index); _sprite.LayerSetSprite((start.Owner, sprite), index, state.Sprite); _sprite.LayerSetScale((start.Owner, sprite), index, state.Scale); //Offset the layer var layerPos = start.Comp.StartPosition; layerPos += (start.Comp.Offset * counter) + state.LocalOffset; _sprite.LayerSetOffset((start.Owner, sprite), index, layerPos); counter++; } } }