using Content.Shared.Construction; using Content.Shared.Construction.Components; using Robust.Client.GameObjects; using Robust.Shared.Prototypes; namespace Content.Client.Construction; /// public sealed partial class FlatpackSystem : SharedFlatpackSystem { [Dependency] private AppearanceSystem _appearance = default!; [Dependency] private SpriteSystem _sprite = default!; /// public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAppearanceChange); } private void OnAppearanceChange(Entity ent, ref AppearanceChangeEvent args) { var (_, comp) = ent; if (!_appearance.TryGetData(ent, FlatpackVisuals.Machine, out var machineBoardId) || args.Sprite == null) return; if (!ProtoMan.TryIndex(machineBoardId, out var machineBoardPrototype)) return; if (!machineBoardPrototype.TryComp(out SpriteComponent? sprite, EntityManager.ComponentFactory)) return; Color? color = null; foreach (var layer in sprite.AllLayers) { if (layer.RsiState.Name is not { } spriteState) continue; if (!comp.BoardColors.TryGetValue(spriteState, out var c)) continue; color = c; break; } if (color != null) _sprite.LayerSetColor((ent.Owner, args.Sprite), FlatpackVisualLayers.Overlay, color.Value); } }