mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-29 19:47:48 +03:00
# Description - Makes jobs use CharacterRequirements - Makes antags use CharReqs - Splits CharReqs into multiple files - Adds a Whitelist CharReq - Prays the tests pass --- --------- Signed-off-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com> Co-authored-by: VMSolidus <evilexecutive@gmail.com>
106 lines
3.2 KiB
C#
106 lines
3.2 KiB
C#
using System.Numerics;
|
|
using Content.Client.Stylesheets;
|
|
using Content.Client.UserInterface.Controls;
|
|
using Content.Shared.Roles;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.CustomControls;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Client.Preferences.UI;
|
|
|
|
public abstract class RequirementsSelector<T> : BoxContainer where T : IPrototype
|
|
{
|
|
public T Proto { get; }
|
|
public JobPrototype HighJob { get; }
|
|
public bool Disabled => _lockStripe.Visible;
|
|
|
|
protected readonly RadioOptions<int> Options;
|
|
private readonly StripeBack _lockStripe;
|
|
|
|
protected RequirementsSelector(T proto, JobPrototype highJob)
|
|
{
|
|
Proto = proto;
|
|
HighJob = highJob;
|
|
|
|
Options = new RadioOptions<int>(RadioOptionsLayout.Horizontal)
|
|
{
|
|
FirstButtonStyle = StyleBase.ButtonOpenRight,
|
|
ButtonStyle = StyleBase.ButtonOpenBoth,
|
|
LastButtonStyle = StyleBase.ButtonOpenLeft,
|
|
};
|
|
//Override default radio option button width
|
|
Options.GenerateItem = GenerateButton;
|
|
Options.OnItemSelected += args => Options.Select(args.Id);
|
|
|
|
var requirementsLabel = new Label
|
|
{
|
|
Text = Loc.GetString("role-timer-locked"),
|
|
Visible = true,
|
|
HorizontalAlignment = HAlignment.Center,
|
|
StyleClasses = {StyleBase.StyleClassLabelSubText},
|
|
};
|
|
|
|
_lockStripe = new StripeBack
|
|
{
|
|
Visible = false,
|
|
HorizontalExpand = true,
|
|
MouseFilter = MouseFilterMode.Stop,
|
|
Children = { requirementsLabel },
|
|
};
|
|
}
|
|
|
|
/// <summary>
|
|
/// Actually adds the controls, must be called in the inheriting class' constructor.
|
|
/// </summary>
|
|
protected void Setup((string, int)[] items, string title, int titleSize, string? description, TextureRect? icon = null)
|
|
{
|
|
foreach (var (text, value) in items)
|
|
Options.AddItem(Loc.GetString(text), value);
|
|
|
|
var titleLabel = new Label
|
|
{
|
|
Margin = new Thickness(5f, 0, 5f, 0),
|
|
Text = title,
|
|
MinSize = new Vector2(titleSize, 0),
|
|
MouseFilter = MouseFilterMode.Stop,
|
|
ToolTip = description
|
|
};
|
|
|
|
var container = new BoxContainer { Orientation = LayoutOrientation.Horizontal, };
|
|
|
|
if (icon != null)
|
|
container.AddChild(icon);
|
|
container.AddChild(titleLabel);
|
|
container.AddChild(Options);
|
|
container.AddChild(_lockStripe);
|
|
|
|
AddChild(container);
|
|
}
|
|
|
|
public void LockRequirements(FormattedMessage requirements)
|
|
{
|
|
var tooltip = new Tooltip();
|
|
tooltip.SetMessage(requirements);
|
|
_lockStripe.TooltipSupplier = _ => tooltip;
|
|
_lockStripe.Visible = true;
|
|
Options.Visible = false;
|
|
}
|
|
|
|
// TODO: Subscribe to roletimers event. I am too lazy to do this RN But I doubt most people will notice fn
|
|
public void UnlockRequirements()
|
|
{
|
|
_lockStripe.Visible = false;
|
|
Options.Visible = true;
|
|
}
|
|
|
|
private Button GenerateButton(string text, int value)
|
|
{
|
|
return new Button
|
|
{
|
|
Text = text,
|
|
MinWidth = 90
|
|
};
|
|
}
|
|
}
|