mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 23:57:29 +00:00
* pickable borg subtypes but better (#706) * borg subtype fixes I Forgot To Push (#790) * update borg subtypes to an entity prototype based approach from SL (#884) https: //github.com/cosmatic-drift-14/cosmatic-drift/pull/884 Co-Authored-By: lunarcomets <140772713+lunarcomets@users.noreply.github.com> * Minor Build Error Tweak Should be ready to add more chassis now! * Yippee Yahoo Handpicked some chassis sprites from AL/SL PR which are from Paradise :D * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Clean up + Comments * CR made me sprite at gunpoint Also switched standard and generic files for consistency and such * the spaces were bothering me + comments --------- Co-authored-by: lunarcomets <140772713+lunarcomets@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
100 lines
3.0 KiB
C#
100 lines
3.0 KiB
C#
using Content.Shared.Silicons.Borgs;
|
|
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._CD.Silicons.Borgs.UI;
|
|
|
|
[GenerateTypedNameReferences]
|
|
public sealed partial class ChassisSpriteSelection : Control
|
|
{
|
|
[Dependency] private readonly IComponentFactory _componentFactory = default!;
|
|
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
|
|
|
public EntityPrototype? SubtypePrototype;
|
|
public event Action? SubtypeSelected;
|
|
|
|
private const int PrototypeViewSize = 2;
|
|
private static readonly ProtoId<EntityCategoryPrototype> _borgSubtypeCategory = "BorgSubtype";
|
|
|
|
public ChassisSpriteSelection()
|
|
{
|
|
RobustXamlLoader.Load(this);
|
|
IoCManager.InjectDependencies(this);
|
|
}
|
|
|
|
public void Update(BorgTypePrototype borgTypePrototype)
|
|
{
|
|
MainContainer.Visible = true;
|
|
|
|
OptionsContainer.RemoveAllChildren();
|
|
|
|
var buttonGroup = new ButtonGroup();
|
|
List<Button> buttons = new List<Button>();
|
|
buttons.Add(CreateDefaultSubtypeButton(borgTypePrototype, buttonGroup));
|
|
|
|
foreach (var ent in _prototype.Categories.GetValueRefOrNullRef(_borgSubtypeCategory))
|
|
{
|
|
if (!ent.TryGetComponent<Shared._CD.Silicons.Borgs.BorgSubtypeDefinitionComponent>(out var subtype, _componentFactory))
|
|
continue;
|
|
|
|
// Only add subtypes of the current selected 'main' borg type (engineering, medical, etc.)
|
|
if (subtype.ParentType != borgTypePrototype.ID)
|
|
continue;
|
|
|
|
var button = new Button
|
|
{
|
|
ToolTip = Loc.GetString($"al-borg-{borgTypePrototype.ID}-subtype-{ent.Name.Replace(' ', '-').ToLower()}-name"),
|
|
Group = buttonGroup,
|
|
MinHeight = 32,
|
|
};
|
|
|
|
button.OnPressed += _ =>
|
|
{
|
|
SubtypePrototype = ent;
|
|
SubtypeSelected?.Invoke();
|
|
};
|
|
|
|
button.AddChild(CreateEntityPrototypeView(subtype.DummyPrototype));
|
|
buttons.Add(button);
|
|
}
|
|
|
|
foreach (var button in buttons)
|
|
{
|
|
OptionsContainer.AddChild(button);
|
|
}
|
|
}
|
|
|
|
private Button CreateDefaultSubtypeButton(BorgTypePrototype borgTypePrototype, ButtonGroup group)
|
|
{
|
|
var button = new Button
|
|
{
|
|
ToolTip = "default",
|
|
Group = group,
|
|
MinHeight = 32,
|
|
};
|
|
|
|
button.OnPressed += _ =>
|
|
{
|
|
SubtypePrototype = null;
|
|
SubtypeSelected?.Invoke();
|
|
};
|
|
|
|
button.AddChild(CreateEntityPrototypeView(borgTypePrototype.DummyPrototype));
|
|
|
|
return button;
|
|
}
|
|
|
|
private EntityPrototypeView CreateEntityPrototypeView(EntProtoId entProtoId)
|
|
{
|
|
var entPrototypeView = new EntityPrototypeView();
|
|
|
|
entPrototypeView.SetPrototype(entProtoId);
|
|
entPrototypeView.Scale *= PrototypeViewSize;
|
|
|
|
return entPrototypeView;
|
|
}
|
|
}
|