mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 18:31:17 +03:00
* allow for manual radial ordering * use order, not i * one third of a radial menu test * add a unit test for the radial menu comparer * Fildrance's suggestions, remove unused compare fn Co-authored-by: Fildrance <14752842+Fildrance@users.noreply.github.com> * comment order, return SortOptions to private I was planning to use this in an integration test, but settled on a unit test. * comments! --------- Co-authored-by: Fildrance <14752842+Fildrance@users.noreply.github.com>
64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
using Content.Client.Stylesheets.Palette;
|
|
using Content.Client.UserInterface.Controls;
|
|
using Content.Shared.Remotes.Components;
|
|
using Content.Shared.Remotes.EntitySystems;
|
|
using Robust.Client.UserInterface;
|
|
|
|
namespace Content.Client.Remotes.UI;
|
|
|
|
public sealed class DoorRemoteBoundUserInterface(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey)
|
|
{
|
|
private static readonly Color SelectedOptionColor = Palettes.Green.Element.WithAlpha(128);
|
|
private static readonly Color SelectedOptionHoverColor = Palettes.Green.HoveredElement.WithAlpha(128);
|
|
|
|
private SimpleRadialMenu? _menu;
|
|
|
|
protected override void Open()
|
|
{
|
|
base.Open();
|
|
|
|
if (!EntMan.TryGetComponent<DoorRemoteComponent>(Owner, out var remote))
|
|
return;
|
|
|
|
_menu = this.CreateWindow<SimpleRadialMenu>();
|
|
var models = CreateButtons(remote.Mode, remote.Options);
|
|
_menu.SetButtons(models);
|
|
|
|
_menu.OpenOverMouseScreenPosition();
|
|
}
|
|
|
|
private IEnumerable<RadialMenuOptionBase> CreateButtons(OperatingMode selectedMode, List<DoorRemoteModeInfo> modeOptions)
|
|
{
|
|
var options = new List<RadialMenuOptionBase>();
|
|
for (var i = 0; i < modeOptions.Count; i++)
|
|
{
|
|
var modeOption = modeOptions[i];
|
|
|
|
Color? optionCustomColor = null;
|
|
Color? optionHoverCustomColor = null;
|
|
if (modeOption.Mode == selectedMode)
|
|
{
|
|
optionCustomColor = SelectedOptionColor;
|
|
optionHoverCustomColor = SelectedOptionHoverColor;
|
|
}
|
|
|
|
var option = new RadialMenuActionOption<OperatingMode>(HandleRadialMenuClick, modeOption.Mode)
|
|
{
|
|
IconSpecifier = RadialMenuIconSpecifier.With(modeOption.Icon),
|
|
ToolTip = Loc.GetString(modeOption.Tooltip),
|
|
BackgroundColor = optionCustomColor,
|
|
HoverBackgroundColor = optionHoverCustomColor,
|
|
Order = i
|
|
};
|
|
options.Add(option);
|
|
}
|
|
|
|
return options;
|
|
}
|
|
|
|
private void HandleRadialMenuClick(OperatingMode mode)
|
|
{
|
|
var msg = new DoorRemoteModeChangeMessage { Mode = mode };
|
|
SendPredictedMessage(msg);
|
|
}
|
|
}
|