mirror of
https://github.com/space-wizards/space-station-14.git
synced 2026-02-14 19:29:53 +01:00
* initial visual nubody * oops overlay * im so pheeming rn * conversion... * tests * comeback of the underwear * oops eyes * blabbl * zeds * yaml linted * search and visible count constraints * reordering * preserve previously selected markings colors * fix test * some ui niceties * ordering * make DB changes backwards-compatible/downgrade-friendly * fix things again * fix migration * vulpkanin markings limit increase * wrapping * code cleanup and more code cleanup and more code cleanup and more code cleanup and * fix slop ports * better sampling API * make filter work + use the method i made for its intended purpose * fix test fails real quick * magic mirror cleanup, remove TODO * don't 0-init the organ profile data * remove deltastates --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
114 lines
3.4 KiB
C#
114 lines
3.4 KiB
C#
using System.Linq;
|
|
using Content.Client.UserInterface.ControlExtensions;
|
|
using Content.Client.Guidebook.Controls;
|
|
using Content.Shared.Body;
|
|
using Content.Shared.Humanoid;
|
|
using Content.Shared.Humanoid.Markings;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Client.Humanoid;
|
|
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class LayerMarkingPicker : BoxContainer
|
|
{
|
|
private readonly IReadOnlyDictionary<string, MarkingPrototype> _allMarkings;
|
|
private readonly ProtoId<OrganCategoryPrototype> _organ;
|
|
private readonly HumanoidVisualLayers _layer;
|
|
private readonly MarkingsViewModel _markingsModel;
|
|
private List<ISearchableControl> _searchable = new();
|
|
private const int _columnWidth = 500;
|
|
|
|
public LayerMarkingPicker(MarkingsViewModel markingsModel, ProtoId<OrganCategoryPrototype> organ, HumanoidVisualLayers layer, IReadOnlyDictionary<string, MarkingPrototype> allMarkings)
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
|
|
_markingsModel = markingsModel;
|
|
_allMarkings = allMarkings;
|
|
_organ = organ;
|
|
_layer = layer;
|
|
|
|
OrderingItems.AddChild(new LayerMarkingOrderer(markingsModel, organ, layer));
|
|
|
|
UpdateMarkings();
|
|
|
|
SearchBar.OnTextChanged += _ =>
|
|
{
|
|
foreach (var element in _searchable)
|
|
{
|
|
element.SetHiddenState(true, SearchBar.Text.Trim());
|
|
}
|
|
};
|
|
|
|
UpdateCount();
|
|
|
|
ReorderButton.OnPressed += ReorderButtonPressed;
|
|
}
|
|
|
|
protected override void EnteredTree()
|
|
{
|
|
base.EnteredTree();
|
|
|
|
_markingsModel.MarkingsReset += UpdateCount;
|
|
_markingsModel.MarkingsChanged += MarkingsChanged;
|
|
}
|
|
|
|
protected override void ExitedTree()
|
|
{
|
|
base.ExitedTree();
|
|
|
|
_markingsModel.MarkingsReset -= UpdateCount;
|
|
_markingsModel.MarkingsChanged -= MarkingsChanged;
|
|
}
|
|
|
|
private void MarkingsChanged(ProtoId<OrganCategoryPrototype> organ, HumanoidVisualLayers layer)
|
|
{
|
|
if (_organ != organ || _layer != layer)
|
|
return;
|
|
|
|
UpdateCount();
|
|
}
|
|
|
|
private void UpdateMarkings()
|
|
{
|
|
foreach (var marking in _allMarkings.Values.OrderBy(marking => Loc.GetString($"marking-{marking.ID}")))
|
|
{
|
|
var item = new LayerMarkingItem(_markingsModel, _organ, _layer, marking, true);
|
|
Items.AddChild(item);
|
|
}
|
|
_searchable = Items.GetSearchableControls();
|
|
}
|
|
|
|
private void UpdateCount()
|
|
{
|
|
_markingsModel.GetMarkingCounts(_organ, _layer, out var isRequired, out var count, out var selected);
|
|
MarkingsStatus.Text = Loc.GetString("markings-limits", ("required", isRequired), ("count", count), ("selectable", count - selected));
|
|
}
|
|
|
|
private void ReorderButtonPressed(BaseButton.ButtonEventArgs args)
|
|
{
|
|
if (ReorderButton.Pressed)
|
|
{
|
|
SelectionItems.Visible = false;
|
|
SearchBar.Visible = false;
|
|
OrderingItems.Visible = true;
|
|
}
|
|
else
|
|
{
|
|
SelectionItems.Visible = true;
|
|
SearchBar.Visible = true;
|
|
OrderingItems.Visible = false;
|
|
}
|
|
}
|
|
|
|
protected override void Resized()
|
|
{
|
|
base.Resized();
|
|
|
|
Items.Columns = (int)(Width / _columnWidth);
|
|
}
|
|
}
|