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(Owner, out var remote)) return; _menu = this.CreateWindow(); var models = CreateButtons(remote.Mode, remote.Options); _menu.SetButtons(models); _menu.OpenOverMouseScreenPosition(); } private IEnumerable CreateButtons(OperatingMode selectedMode, List modeOptions) { var options = new List(); 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(HandleRadialMenuClick, modeOption.Mode) { IconSpecifier = RadialMenuIconSpecifier.With(modeOption.Icon), ToolTip = Loc.GetString(modeOption.Tooltip), BackgroundColor = optionCustomColor, HoverBackgroundColor = optionHoverCustomColor }; options.Add(option); } return options; } private void HandleRadialMenuClick(OperatingMode mode) { var msg = new DoorRemoteModeChangeMessage { Mode = mode }; SendPredictedMessage(msg); } }