Files
ss14-wl/Content.Client/Corvax/SecApartment/CrewMemberEntry.xaml.cs
T
2026-03-10 21:37:09 +07:00

113 lines
3.4 KiB
C#

using System.Linq;
using System.Numerics;
using Content.Client.Corvax.SecApartment.Stylesheets;
using Content.Shared.SecApartment;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Utility;
namespace Content.Client.Corvax.SecApartment;
[GenerateTypedNameReferences]
public sealed partial class CrewMemberEntry : PanelContainer
{
private readonly SpriteSystem _sprite;
public CrewMemberInfo CrewMember { get; }
public List<Squad> Squads { get; }
private readonly Dictionary<int, string> _squadIdMap = new();
public Action<string>? OnAssignPressed;
public CrewMemberEntry(CrewMemberInfo crewMember, List<Squad> squads, SpriteSpecifier? jobIcon, SpriteSystem sprite)
{
RobustXamlLoader.Load(this);
CrewMember = crewMember;
Squads = squads;
_sprite = sprite;
SetupStyles();
SetupUI(jobIcon);
}
private void SetupUI(SpriteSpecifier? jobIcon)
{
MemberNameLabel.Text = CrewMember.Name;
JobTitleLabel.Text = CrewMember.JobTitle;
if (jobIcon != null)
{
var icon = new TextureRect()
{
TextureScale = new Vector2(2, 2),
VerticalAlignment = VAlignment.Center,
HorizontalAlignment = HAlignment.Left,
Texture = _sprite.Frame0(jobIcon),
Margin = new Thickness(0, 0, 4, 0),
Stretch = TextureRect.StretchMode.KeepCentered
};
JobContaiber.AddChild(icon);
}
UpdateSquadDropdown();
SquadDropdown.OnItemSelected += args =>
{
SquadDropdown.SelectId(args.Id);
if (SquadDropdown.SelectedId >= 0 && _squadIdMap.TryGetValue(SquadDropdown.SelectedId, out var squadId))
OnAssignPressed?.Invoke(squadId);
};
}
private void SetupStyles()
{
PanelOverride = new StyleBoxFlat
{
BackgroundColor = Color.FromHex("#441111"),
BorderColor = SecApartmentStyles.TabActiveColor,
BorderThickness = new Thickness(1),
ContentMarginBottomOverride = 4,
ContentMarginLeftOverride = 8,
ContentMarginRightOverride = 8,
ContentMarginTopOverride = 4
};
SquadDropdown.AddStyleClass(SecApartmentStyles.StyleClassOptionButton);
SquadDropdown.OptionStyleClasses.Add(SecApartmentStyles.StyleClassButtonRed);
MemberNameLabel.FontColorOverride = SecApartmentStyles.HeadingColor;
JobTitleLabel.FontColorOverride = SecApartmentStyles.SubTextColor;
}
private void UpdateSquadDropdown()
{
SquadDropdown.Clear();
_squadIdMap.Clear();
if (!Squads.Any())
{
SquadDropdown.AddItem(Loc.GetString("sec-apartment-assign-no-squads"));
SquadDropdown.Disabled = true;
return;
}
SquadDropdown.Disabled = false;
SquadDropdown.AddItem(Loc.GetString("sec-apartment-assign-select-squad"));
foreach (var squad in Squads)
{
var index = SquadDropdown.ItemCount;
SquadDropdown.AddItem($"{squad.Name} ({squad.Members.Count})");
_squadIdMap[index] = squad.SquadId;
}
SquadDropdown.Select(0);
}
}