* Vox stuff * Species loadouts and lobby refactor The control flow for lobby is all over the shop so I pulled it all up from the individual controls so now they handle the bare minimum required and LobbyUIController handles the rest. * a * Bulk changes * a * weh * Character import / export * finalise * woops this stuff too * Also datafield exporting * comments * Review
93 lines
2.8 KiB
C#
93 lines
2.8 KiB
C#
using System.Linq;
|
|
using Content.Client.Humanoid;
|
|
using Content.Shared.Clothing;
|
|
using Content.Shared.Humanoid;
|
|
using Content.Shared.Humanoid.Prototypes;
|
|
using Content.Shared.Preferences;
|
|
using Content.Shared.Preferences.Loadouts;
|
|
using Content.Shared.Roles;
|
|
using Robust.Client.AutoGenerated;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.XAML;
|
|
using Robust.Shared.Map;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Client.Lobby.UI;
|
|
|
|
/// <summary>
|
|
/// Holds character data on the side of the setup GUI.
|
|
/// </summary>
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class CharacterPickerButton : ContainerButton
|
|
{
|
|
private IEntityManager _entManager;
|
|
|
|
private EntityUid _previewDummy;
|
|
|
|
/// <summary>
|
|
/// Invoked if we should delete the attached character
|
|
/// </summary>
|
|
public event Action? OnDeletePressed;
|
|
|
|
public CharacterPickerButton(
|
|
IEntityManager entityManager,
|
|
IPrototypeManager prototypeManager,
|
|
ButtonGroup group,
|
|
ICharacterProfile profile,
|
|
bool isSelected)
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
_entManager = entityManager;
|
|
AddStyleClass(StyleClassButton);
|
|
ToggleMode = true;
|
|
Group = group;
|
|
var description = profile.Name;
|
|
|
|
if (profile is not HumanoidCharacterProfile humanoid)
|
|
{
|
|
_previewDummy = entityManager.SpawnEntity(prototypeManager.Index<SpeciesPrototype>(SharedHumanoidAppearanceSystem.DefaultSpecies).DollPrototype, MapCoordinates.Nullspace);
|
|
}
|
|
else
|
|
{
|
|
_previewDummy = UserInterfaceManager.GetUIController<LobbyUIController>()
|
|
.LoadProfileEntity(humanoid, null, true);
|
|
|
|
var highPriorityJob = humanoid.JobPriorities.SingleOrDefault(p => p.Value == JobPriority.High).Key;
|
|
if (highPriorityJob != null)
|
|
{
|
|
var jobName = prototypeManager.Index<JobPrototype>(highPriorityJob).LocalizedName;
|
|
description = $"{description}\n{jobName}";
|
|
}
|
|
}
|
|
|
|
Pressed = isSelected;
|
|
DeleteButton.Visible = !isSelected;
|
|
|
|
View.SetEntity(_previewDummy);
|
|
DescriptionLabel.Text = description;
|
|
|
|
ConfirmDeleteButton.OnPressed += _ =>
|
|
{
|
|
Parent?.RemoveChild(this);
|
|
Parent?.RemoveChild(ConfirmDeleteButton);
|
|
OnDeletePressed?.Invoke();
|
|
};
|
|
|
|
DeleteButton.OnPressed += _ =>
|
|
{
|
|
DeleteButton.Visible = false;
|
|
ConfirmDeleteButton.Visible = true;
|
|
};
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
if (!disposing)
|
|
return;
|
|
|
|
_entManager.DeleteEntity(_previewDummy);
|
|
_previewDummy = default;
|
|
}
|
|
}
|