From 31851e5468de067679ef88e925165e0f28ca64a1 Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Wed, 19 Apr 2023 03:47:01 -0400 Subject: [PATCH] [Entity] Brig Timers (#15285) * brigtimer * ok * TextScreen w timer implementation * second commit * working brig timer * signal timers near completion * soon done * removed licenses, fixes noRotation on screens, minor edits * no message * no message * removed my last todos * removed csproj.rej?? * missed a thing with .yml and tests * fix tests * Update base_structureairlocks.yml * timespan type serialize * activation turned into comp * sloth review * Update timer.yml * small changes --------- Co-authored-by: CommieFlowers Co-authored-by: rolfero <45628623+rolfero@users.noreply.github.com> --- .../UI/SignalTimerBoundUserInterface.cs | 81 +++++ .../MachineLinking/UI/SignalTimerWindow.xaml | 17 + .../UI/SignalTimerWindow.xaml.cs | 192 ++++++++++++ Content.Client/TextScreen/TextScreenSystem.cs | 295 ++++++++++++++++++ .../TextScreen/TextScreenTimerComponent.cs | 10 + .../TextScreen/TextScreenVisualsComponent.cs | 66 ++++ Content.Server/Doors/Systems/AirlockSystem.cs | 14 + .../Components/ActiveSignalTimerComponent.cs | 15 + .../Components/SignalTimerComponent.cs | 42 +++ .../System/SignalTimerSystem.cs | 162 ++++++++++ .../Doors/Components/AirlockComponent.cs | 8 + .../SharedSignalTimerComponent.cs | 68 ++++ .../TextScreen/TextScreenVisuals.cs | 35 +++ .../components/signal-timer-component.ftl | 4 + .../en-US/machine-linking/receiver_ports.ftl | 3 + .../machine-linking/transmitter_ports.ftl | 6 + .../Doors/Airlocks/base_structureairlocks.yml | 1 + .../Doors/Windoors/base_structurewindoors.yml | 1 + .../Entities/Structures/Wallmounts/timer.yml | 64 ++++ .../MachineLinking/receiver_ports.yml | 5 + .../MachineLinking/transmitter_ports.yml | 14 +- Resources/Textures/Effects/text.rsi/0.png | Bin 0 -> 141 bytes Resources/Textures/Effects/text.rsi/1.png | Bin 0 -> 140 bytes Resources/Textures/Effects/text.rsi/2.png | Bin 0 -> 140 bytes Resources/Textures/Effects/text.rsi/3.png | Bin 0 -> 135 bytes Resources/Textures/Effects/text.rsi/4.png | Bin 0 -> 138 bytes Resources/Textures/Effects/text.rsi/5.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/6.png | Bin 0 -> 144 bytes Resources/Textures/Effects/text.rsi/7.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/8.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/9.png | Bin 0 -> 143 bytes Resources/Textures/Effects/text.rsi/a.png | Bin 0 -> 141 bytes Resources/Textures/Effects/text.rsi/b.png | Bin 0 -> 143 bytes Resources/Textures/Effects/text.rsi/blank.png | Bin 0 -> 120 bytes Resources/Textures/Effects/text.rsi/c.png | Bin 0 -> 141 bytes Resources/Textures/Effects/text.rsi/colon.png | Bin 0 -> 129 bytes Resources/Textures/Effects/text.rsi/d.png | Bin 0 -> 136 bytes Resources/Textures/Effects/text.rsi/dash.png | Bin 0 -> 132 bytes Resources/Textures/Effects/text.rsi/e.png | Bin 0 -> 134 bytes .../Textures/Effects/text.rsi/exclamation.png | Bin 0 -> 136 bytes Resources/Textures/Effects/text.rsi/f.png | Bin 0 -> 136 bytes Resources/Textures/Effects/text.rsi/g.png | Bin 0 -> 142 bytes Resources/Textures/Effects/text.rsi/h.png | Bin 0 -> 145 bytes Resources/Textures/Effects/text.rsi/i.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/j.png | Bin 0 -> 144 bytes Resources/Textures/Effects/text.rsi/k.png | Bin 0 -> 141 bytes Resources/Textures/Effects/text.rsi/l.png | Bin 0 -> 138 bytes Resources/Textures/Effects/text.rsi/m.png | Bin 0 -> 144 bytes Resources/Textures/Effects/text.rsi/meta.json | 140 +++++++++ Resources/Textures/Effects/text.rsi/n.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/o.png | Bin 0 -> 140 bytes Resources/Textures/Effects/text.rsi/p.png | Bin 0 -> 143 bytes Resources/Textures/Effects/text.rsi/plus.png | Bin 0 -> 135 bytes Resources/Textures/Effects/text.rsi/q.png | Bin 0 -> 140 bytes .../Textures/Effects/text.rsi/question.png | Bin 0 -> 138 bytes Resources/Textures/Effects/text.rsi/r.png | Bin 0 -> 141 bytes Resources/Textures/Effects/text.rsi/s.png | Bin 0 -> 136 bytes Resources/Textures/Effects/text.rsi/star.png | Bin 0 -> 131 bytes Resources/Textures/Effects/text.rsi/t.png | Bin 0 -> 137 bytes Resources/Textures/Effects/text.rsi/u.png | Bin 0 -> 135 bytes Resources/Textures/Effects/text.rsi/v.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/w.png | Bin 0 -> 142 bytes Resources/Textures/Effects/text.rsi/x.png | Bin 0 -> 139 bytes Resources/Textures/Effects/text.rsi/y.png | Bin 0 -> 138 bytes Resources/Textures/Effects/text.rsi/z.png | Bin 0 -> 138 bytes .../Wallmounts/textscreen.rsi/meta.json | 14 + .../Wallmounts/textscreen.rsi/textscreen.png | Bin 0 -> 870 bytes 67 files changed, 1256 insertions(+), 1 deletion(-) create mode 100644 Content.Client/MachineLinking/UI/SignalTimerBoundUserInterface.cs create mode 100644 Content.Client/MachineLinking/UI/SignalTimerWindow.xaml create mode 100644 Content.Client/MachineLinking/UI/SignalTimerWindow.xaml.cs create mode 100644 Content.Client/TextScreen/TextScreenSystem.cs create mode 100644 Content.Client/TextScreen/TextScreenTimerComponent.cs create mode 100644 Content.Client/TextScreen/TextScreenVisualsComponent.cs create mode 100644 Content.Server/MachineLinking/Components/ActiveSignalTimerComponent.cs create mode 100644 Content.Server/MachineLinking/Components/SignalTimerComponent.cs create mode 100644 Content.Server/MachineLinking/System/SignalTimerSystem.cs create mode 100644 Content.Shared/MachineLinking/SharedSignalTimerComponent.cs create mode 100644 Content.Shared/TextScreen/TextScreenVisuals.cs create mode 100644 Resources/Locale/en-US/machine-linking/components/signal-timer-component.ftl create mode 100644 Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml create mode 100644 Resources/Textures/Effects/text.rsi/0.png create mode 100644 Resources/Textures/Effects/text.rsi/1.png create mode 100644 Resources/Textures/Effects/text.rsi/2.png create mode 100644 Resources/Textures/Effects/text.rsi/3.png create mode 100644 Resources/Textures/Effects/text.rsi/4.png create mode 100644 Resources/Textures/Effects/text.rsi/5.png create mode 100644 Resources/Textures/Effects/text.rsi/6.png create mode 100644 Resources/Textures/Effects/text.rsi/7.png create mode 100644 Resources/Textures/Effects/text.rsi/8.png create mode 100644 Resources/Textures/Effects/text.rsi/9.png create mode 100644 Resources/Textures/Effects/text.rsi/a.png create mode 100644 Resources/Textures/Effects/text.rsi/b.png create mode 100644 Resources/Textures/Effects/text.rsi/blank.png create mode 100644 Resources/Textures/Effects/text.rsi/c.png create mode 100644 Resources/Textures/Effects/text.rsi/colon.png create mode 100644 Resources/Textures/Effects/text.rsi/d.png create mode 100644 Resources/Textures/Effects/text.rsi/dash.png create mode 100644 Resources/Textures/Effects/text.rsi/e.png create mode 100644 Resources/Textures/Effects/text.rsi/exclamation.png create mode 100644 Resources/Textures/Effects/text.rsi/f.png create mode 100644 Resources/Textures/Effects/text.rsi/g.png create mode 100644 Resources/Textures/Effects/text.rsi/h.png create mode 100644 Resources/Textures/Effects/text.rsi/i.png create mode 100644 Resources/Textures/Effects/text.rsi/j.png create mode 100644 Resources/Textures/Effects/text.rsi/k.png create mode 100644 Resources/Textures/Effects/text.rsi/l.png create mode 100644 Resources/Textures/Effects/text.rsi/m.png create mode 100644 Resources/Textures/Effects/text.rsi/meta.json create mode 100644 Resources/Textures/Effects/text.rsi/n.png create mode 100644 Resources/Textures/Effects/text.rsi/o.png create mode 100644 Resources/Textures/Effects/text.rsi/p.png create mode 100644 Resources/Textures/Effects/text.rsi/plus.png create mode 100644 Resources/Textures/Effects/text.rsi/q.png create mode 100644 Resources/Textures/Effects/text.rsi/question.png create mode 100644 Resources/Textures/Effects/text.rsi/r.png create mode 100644 Resources/Textures/Effects/text.rsi/s.png create mode 100644 Resources/Textures/Effects/text.rsi/star.png create mode 100644 Resources/Textures/Effects/text.rsi/t.png create mode 100644 Resources/Textures/Effects/text.rsi/u.png create mode 100644 Resources/Textures/Effects/text.rsi/v.png create mode 100644 Resources/Textures/Effects/text.rsi/w.png create mode 100644 Resources/Textures/Effects/text.rsi/x.png create mode 100644 Resources/Textures/Effects/text.rsi/y.png create mode 100644 Resources/Textures/Effects/text.rsi/z.png create mode 100644 Resources/Textures/Structures/Wallmounts/textscreen.rsi/meta.json create mode 100644 Resources/Textures/Structures/Wallmounts/textscreen.rsi/textscreen.png diff --git a/Content.Client/MachineLinking/UI/SignalTimerBoundUserInterface.cs b/Content.Client/MachineLinking/UI/SignalTimerBoundUserInterface.cs new file mode 100644 index 0000000000..e9cfba697f --- /dev/null +++ b/Content.Client/MachineLinking/UI/SignalTimerBoundUserInterface.cs @@ -0,0 +1,81 @@ +using Content.Shared.MachineLinking; +using Robust.Client.GameObjects; +using Robust.Shared.Timing; + +namespace Content.Client.MachineLinking.UI; + +public sealed class SignalTimerBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + + private SignalTimerWindow? _window; + + public SignalTimerBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = new SignalTimerWindow(this); + + if (State != null) + UpdateState(State); + + _window.OpenCentered(); + _window.OnClose += Close; + _window.OnCurrentTextChanged += OnTextChanged; + _window.OnCurrentDelayMinutesChanged += OnDelayChanged; + _window.OnCurrentDelaySecondsChanged += OnDelayChanged; + } + + public void OnStartTimer() + { + SendMessage(new SignalTimerStartMessage()); + } + + private void OnTextChanged(string newText) + { + SendMessage(new SignalTimerTextChangedMessage(newText)); + } + + private void OnDelayChanged(string newDelay) + { + if (_window == null) + return; + SendMessage(new SignalTimerDelayChangedMessage(_window.GetDelay())); + } + + public TimeSpan GetCurrentTime() + { + return _gameTiming.CurTime; + } + + /// + /// Update the UI state based on server-sent info + /// + /// + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_window == null || state is not SignalTimerBoundUserInterfaceState cast) + return; + + _window.SetCurrentText(cast.CurrentText); + _window.SetCurrentDelayMinutes(cast.CurrentDelayMinutes); + _window.SetCurrentDelaySeconds(cast.CurrentDelaySeconds); + _window.SetShowText(cast.ShowText); + _window.SetTriggerTime(cast.TriggerTime); + _window.SetTimerStarted(cast.TimerStarted); + _window.SetHasAccess(cast.HasAccess); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + _window?.Dispose(); + } +} diff --git a/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml new file mode 100644 index 0000000000..b30bd1c5f2 --- /dev/null +++ b/Content.Client/MachineLinking/UI/SignalTimerWindow.xaml @@ -0,0 +1,17 @@ + + + + + + +