From b936ee6ad88f8be77dc12aea96402b2eb1bc50de Mon Sep 17 00:00:00 2001 From: Alex Evgrashin Date: Thu, 11 Nov 2021 04:29:11 +0300 Subject: [PATCH] Add barebone nuke (#5242) Co-authored-by: Alexander Evgrashin --- Content.Client/Entry/IgnoredComponents.cs | 2 + Content.Client/Nuke/NukeBoundUserInterface.cs | 79 ++++ Content.Client/Nuke/NukeMenu.xaml | 46 ++ Content.Client/Nuke/NukeMenu.xaml.cs | 115 +++++ .../Nuke/Commands/SendNukeCodesCommand.cs | 22 + .../Nuke/Commands/ToggleNukeCommand.cs | 63 +++ Content.Server/Nuke/NukeCodePaperComponent.cs | 14 + Content.Server/Nuke/NukeCodePaperSystem.cs | 27 ++ Content.Server/Nuke/NukeCodeSystem.cs | 88 ++++ Content.Server/Nuke/NukeComponent.cs | 101 ++++ Content.Server/Nuke/NukeSystem.cs | 437 ++++++++++++++++++ Content.Server/Paper/PaperComponent.cs | 2 +- Content.Shared/Nuke/NukeUiMessages.cs | 42 ++ Content.Shared/Nuke/SharedNuke.cs | 32 ++ Resources/Audio/Machines/Nuke/angry_beep.ogg | Bin 0 -> 7106 bytes .../Audio/Machines/Nuke/confirm_beep.ogg | Bin 0 -> 12987 bytes .../Audio/Machines/Nuke/general_beep.ogg | Bin 0 -> 4714 bytes Resources/Audio/Machines/alarm.ogg | Bin 0 -> 108421 bytes .../Audio/Machines/terminal_insert_disc.ogg | Bin 0 -> 15642 bytes Resources/Audio/Misc/notice1.ogg | Bin 0 -> 53513 bytes Resources/Audio/Misc/notice2.ogg | Bin 0 -> 6218 bytes .../Locale/en-US/nuke/nuke-component.ftl | 27 ++ .../Entities/Objects/Devices/nuke.yml | 40 ++ .../Entities/Objects/Misc/paper.yml | 11 + .../Objects/Devices/nuke.rsi/meta.json | 23 + .../Devices/nuke.rsi/nuclearbomb_base.png | Bin 0 -> 801 bytes .../nuke.rsi/nuclearbomb_exploding.png | Bin 0 -> 1036 bytes .../nuke.rsi/nuclearbomb_safetyoff.png | Bin 0 -> 819 bytes .../Devices/nuke.rsi/nuclearbomb_timing.png | Bin 0 -> 939 bytes 29 files changed, 1170 insertions(+), 1 deletion(-) create mode 100644 Content.Client/Nuke/NukeBoundUserInterface.cs create mode 100644 Content.Client/Nuke/NukeMenu.xaml create mode 100644 Content.Client/Nuke/NukeMenu.xaml.cs create mode 100644 Content.Server/Nuke/Commands/SendNukeCodesCommand.cs create mode 100644 Content.Server/Nuke/Commands/ToggleNukeCommand.cs create mode 100644 Content.Server/Nuke/NukeCodePaperComponent.cs create mode 100644 Content.Server/Nuke/NukeCodePaperSystem.cs create mode 100644 Content.Server/Nuke/NukeCodeSystem.cs create mode 100644 Content.Server/Nuke/NukeComponent.cs create mode 100644 Content.Server/Nuke/NukeSystem.cs create mode 100644 Content.Shared/Nuke/NukeUiMessages.cs create mode 100644 Content.Shared/Nuke/SharedNuke.cs create mode 100644 Resources/Audio/Machines/Nuke/angry_beep.ogg create mode 100644 Resources/Audio/Machines/Nuke/confirm_beep.ogg create mode 100644 Resources/Audio/Machines/Nuke/general_beep.ogg create mode 100644 Resources/Audio/Machines/alarm.ogg create mode 100644 Resources/Audio/Machines/terminal_insert_disc.ogg create mode 100644 Resources/Audio/Misc/notice1.ogg create mode 100644 Resources/Audio/Misc/notice2.ogg create mode 100644 Resources/Locale/en-US/nuke/nuke-component.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Devices/nuke.yml create mode 100644 Resources/Textures/Objects/Devices/nuke.rsi/meta.json create mode 100644 Resources/Textures/Objects/Devices/nuke.rsi/nuclearbomb_base.png create mode 100644 Resources/Textures/Objects/Devices/nuke.rsi/nuclearbomb_exploding.png create mode 100644 Resources/Textures/Objects/Devices/nuke.rsi/nuclearbomb_safetyoff.png create mode 100644 Resources/Textures/Objects/Devices/nuke.rsi/nuclearbomb_timing.png 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 @@ + + + + + + + + + + + + + + + + + + + +