]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Optimize artifact analyzer UI state sending (#22949)
authorKara <lunarautomaton6@gmail.com>
Mon, 25 Dec 2023 20:50:10 +0000 (13:50 -0700)
committerGitHub <noreply@github.com>
Mon, 25 Dec 2023 20:50:10 +0000 (12:50 -0800)
* Remove n rename cruft old shit

* Artifact analyzer UI updating optimization

* Revert "Remove n rename cruft old shit"

This reverts commit 8789338fb20f77d79c5b0e40719896efe0103fcc.

Content.Client/Xenoarchaeology/Ui/AnalysisConsoleBoundUserInterface.cs
Content.Client/Xenoarchaeology/Ui/AnalysisConsoleMenu.xaml.cs
Content.Server/Xenoarchaeology/Equipment/Systems/ArtifactAnalyzerSystem.cs
Content.Shared/Xenoarchaeology/Equipment/SharedArtifactAnalyzer.cs

index 9039a2e83138b067ef00a40949a39198bf8f0cac..143f01b6b7e0ed0c9e3ebb0e8dd6944502d4d34e 100644 (file)
@@ -61,6 +61,7 @@ public sealed class AnalysisConsoleBoundUserInterface : BoundUserInterface
 
         if (!disposing)
             return;
+
         _consoleMenu?.Dispose();
     }
 }
index 1a8ba6c8c928969bb4d9aa4e3fb27c8adee02dd3..5031a3d99c1c39928f161ed8ec8a2325744958b5 100644 (file)
@@ -4,6 +4,7 @@ using Content.Shared.Xenoarchaeology.Equipment;
 using Robust.Client.AutoGenerated;
 using Robust.Client.GameObjects;
 using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Timing;
 using Robust.Shared.Utility;
 
 namespace Content.Client.Xenoarchaeology.Ui;
@@ -12,11 +13,17 @@ namespace Content.Client.Xenoarchaeology.Ui;
 public sealed partial class AnalysisConsoleMenu : FancyWindow
 {
     [Dependency] private readonly IEntityManager _ent = default!;
+    [Dependency] private readonly IGameTiming _timing = default!;
+
     public event Action? OnServerSelectionButtonPressed;
     public event Action? OnScanButtonPressed;
     public event Action? OnPrintButtonPressed;
     public event Action? OnExtractButtonPressed;
 
+    // For rendering the progress bar, updated from BUI state
+    private TimeSpan? _startTime;
+    private TimeSpan? _totalTime;
+
     public AnalysisConsoleMenu()
     {
         RobustXamlLoader.Load(this);
@@ -28,6 +35,23 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
         ExtractButton.OnPressed += _ => OnExtractButtonPressed?.Invoke();
     }
 
+    protected override void FrameUpdate(FrameEventArgs args)
+    {
+        base.FrameUpdate(args);
+
+        if (_startTime is not { } start || _totalTime is not { } total)
+            return;
+
+        var remaining = start + total - _timing.CurTime;
+        var secsText = Math.Max((int) remaining.TotalSeconds, 0);
+
+        ProgressLabel.Text = Loc.GetString("analysis-console-progress-text",
+            ("seconds", secsText));
+
+        // 1.0 - div because we want it to tick up not down
+        ProgressBar.Value = Math.Clamp(1.0f - (float) remaining.Divide(total), 0.0f, 1.0f);
+    }
+
     public void SetButtonsDisabled(AnalysisConsoleScanUpdateState state)
     {
         ScanButton.Disabled = !state.CanScan;
@@ -54,8 +78,8 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
             ArtifactDisplay.Visible = false;
             return;
         }
-        ArtifactDisplay.Visible = true;
 
+        ArtifactDisplay.Visible = true;
         ArtifactDisplay.SetEntity(uid);
     }
 
@@ -95,12 +119,8 @@ public sealed partial class AnalysisConsoleMenu : FancyWindow
         ProgressBar.Visible = state.Scanning;
         ProgressLabel.Visible = state.Scanning;
 
-        if (!state.Scanning)
-            return;
-
-        ProgressLabel.Text = Loc.GetString("analysis-console-progress-text",
-            ("seconds", (int) state.TotalTime.TotalSeconds - (int) state.TimeRemaining.TotalSeconds));
-        ProgressBar.Value = (float) state.TimeRemaining.Divide(state.TotalTime);
+        _startTime = state.StartTime;
+        _totalTime = state.TotalTime;
     }
 }
 
index 17e801cc1895267278e866964dd18de436aa5337..500546c0331862a548e8a43fdeeb6d0b3bba8363 100644 (file)
@@ -79,9 +79,6 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
         var query = EntityQueryEnumerator<ActiveArtifactAnalyzerComponent, ArtifactAnalyzerComponent>();
         while (query.MoveNext(out var uid, out var active, out var scan))
         {
-            if (scan.Console != null)
-                UpdateUserInterface(scan.Console.Value);
-
             if (_timing.CurTime - active.StartTime < scan.AnalysisDuration * scan.AnalysisDurationMulitplier)
                 continue;
 
@@ -191,7 +188,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
 
         EntityUid? artifact = null;
         FormattedMessage? msg = null;
-        var totalTime = TimeSpan.Zero;
+        TimeSpan? totalTime = null;
         var canScan = false;
         var canPrint = false;
         var points = 0;
@@ -212,10 +209,9 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
         var serverConnected = TryComp<ResearchClientComponent>(uid, out var client) && client.ConnectedToServer;
 
         var scanning = TryComp<ActiveArtifactAnalyzerComponent>(component.AnalyzerEntity, out var active);
-        var remaining = active != null ? _timing.CurTime - active.StartTime : TimeSpan.Zero;
 
         var state = new AnalysisConsoleScanUpdateState(GetNetEntity(artifact), analyzerConnected, serverConnected,
-            canScan, canPrint, msg, scanning, remaining, totalTime, points);
+            canScan, canPrint, msg, scanning, active?.StartTime, totalTime, points);
 
         var bui = _ui.GetUi(uid, ArtifactAnalzyerUiKey.Key);
         _ui.SetUiState(bui, state);
@@ -256,6 +252,7 @@ public sealed class ArtifactAnalyzerSystem : EntitySystem
 
         var activeArtifact = EnsureComp<ActiveScannedArtifactComponent>(ent.Value);
         activeArtifact.Scanner = component.AnalyzerEntity.Value;
+        UpdateUserInterface(uid, component);
     }
 
     private void OnPrintButton(EntityUid uid, AnalysisConsoleComponent component, AnalysisConsolePrintButtonPressedMessage args)
index 151bea990f031004c2a33d5808b8cb7b7c6f58f4..a36effaf5edc4cd46860d6288ee1da35358e52fa 100644 (file)
@@ -46,14 +46,14 @@ public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState
 
     public bool Scanning;
 
-    public TimeSpan TimeRemaining;
+    public TimeSpan? StartTime;
 
-    public TimeSpan TotalTime;
+    public TimeSpan? TotalTime;
 
     public int PointAmount;
 
     public AnalysisConsoleScanUpdateState(NetEntity? artifact, bool analyzerConnected, bool serverConnected, bool canScan, bool canPrint,
-        FormattedMessage? scanReport, bool scanning, TimeSpan timeRemaining, TimeSpan totalTime, int pointAmount)
+        FormattedMessage? scanReport, bool scanning, TimeSpan? startTime, TimeSpan? totalTime, int pointAmount)
     {
         Artifact = artifact;
         AnalyzerConnected = analyzerConnected;
@@ -64,7 +64,7 @@ public sealed class AnalysisConsoleScanUpdateState : BoundUserInterfaceState
         ScanReport = scanReport;
 
         Scanning = scanning;
-        TimeRemaining = timeRemaining;
+        StartTime = startTime;
         TotalTime = totalTime;
 
         PointAmount = pointAmount;