mirror of
https://github.com/corvax-team/ss14-wl.git
synced 2026-06-09 10:06:46 +02:00
113 lines
3.4 KiB
C#
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);
|
|
}
|
|
}
|