diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index 8375ceadeb..3413c60249 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -303,6 +303,8 @@ namespace Content.Client.Entry "ApcNetSwitch", "HandLabeler", "Label", + "Nuke", + "NukeCodePaper", "GhostRadio", "Armor", "PneumaticCannon" diff --git a/Content.Client/Nuke/NukeBoundUserInterface.cs b/Content.Client/Nuke/NukeBoundUserInterface.cs new file mode 100644 index 0000000000..a578fd093b --- /dev/null +++ b/Content.Client/Nuke/NukeBoundUserInterface.cs @@ -0,0 +1,79 @@ +using Content.Client.Traitor.Uplink; +using Content.Shared.Nuke; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.Localization; + +namespace Content.Client.Nuke +{ + [UsedImplicitly] + public class NukeBoundUserInterface : BoundUserInterface + { + private NukeMenu? _menu; + + public NukeBoundUserInterface([NotNull] ClientUserInterfaceComponent owner, [NotNull] object uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + _menu = new NukeMenu(); + _menu.OpenCentered(); + _menu.OnClose += Close; + + _menu.OnKeypadButtonPressed += i => + { + SendMessage(new NukeKeypadMessage(i)); + }; + _menu.OnEnterButtonPressed += () => + { + SendMessage(new NukeKeypadEnterMessage()); + }; + _menu.OnClearButtonPressed += () => + { + SendMessage(new NukeKeypadClearMessage()); + }; + + _menu.EjectButton.OnPressed += _ => + { + SendMessage(new NukeEjectMessage()); + }; + _menu.AnchorButton.OnPressed += _ => + { + SendMessage(new NukeAnchorMessage()); + }; + _menu.ArmButton.OnPressed += _ => + { + SendMessage(new NukeArmedMessage()); + }; + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_menu == null) + return; + + switch (state) + { + case NukeUiState msg: + { + _menu.UpdateState(msg); + break; + } + } + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + + _menu?.Close(); + _menu?.Dispose(); + } + } +} diff --git a/Content.Client/Nuke/NukeMenu.xaml b/Content.Client/Nuke/NukeMenu.xaml new file mode 100644 index 0000000000..3772d27501 --- /dev/null +++ b/Content.Client/Nuke/NukeMenu.xaml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + +