using System.Collections.Generic; using Content.Client.Stylesheets; using Content.Shared.Crayon; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Client.Utility; using Robust.Shared.Maths; using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BaseButton; namespace Content.Client.Crayon.UI { [GenerateTypedNameReferences] public partial class CrayonWindow : SS14Window { public CrayonBoundUserInterface Owner { get; } private Dictionary? _decals; private string? _selected; private Color _color; public CrayonWindow(CrayonBoundUserInterface owner) { RobustXamlLoader.Load(this); Owner = owner; Search.OnTextChanged += _ => RefreshList(); } private void RefreshList() { // Clear Grid.RemoveAllChildren(); if (_decals == null) return; var filter = Search.Text; foreach (var (decal, tex) in _decals) { if (!decal.Contains(filter)) continue; var button = new TextureButton() { TextureNormal = tex, Name = decal, ToolTip = decal, Modulate = _color, }; button.OnPressed += ButtonOnPressed; if (_selected == decal) { var panelContainer = new PanelContainer() { PanelOverride = new StyleBoxFlat() { BackgroundColor = StyleNano.ButtonColorDefault, }, Children = { button, }, }; Grid.AddChild(panelContainer); } else { Grid.AddChild(button); } } } private void ButtonOnPressed(ButtonEventArgs obj) { if (obj.Button.Name == null) return; Owner.Select(obj.Button.Name); _selected = obj.Button.Name; RefreshList(); } public void UpdateState(CrayonBoundUserInterfaceState state) { _selected = state.Selected; _color = state.Color; RefreshList(); } public void Populate(CrayonDecalPrototype proto) { var path = new ResourcePath(proto.SpritePath); _decals = new Dictionary(); foreach (var state in proto.Decals) { var rsi = new SpriteSpecifier.Rsi(path, state); _decals.Add(state, rsi.Frame0()); } RefreshList(); } } }