From b7de51fc17c152bee91607ad24a34deb8c045be7 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 28 Jun 2026 09:55:28 +0100 Subject: [PATCH] Use reactive player settings provider --- Aetheria.State.Verify/Program.cs | 7 +++- .../AetheriaUnityRuntimeClientProvider.cs | 38 ++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index a8a674421..122a29f48 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -14567,7 +14567,8 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) var requiredRuntimeClientProviderSymbols = new[] { "public static class AetheriaUnityRuntimeClientProvider", - "public static RuntimePlayerSettings PlayerSettings =>", + "private static CultMeshReactiveDocument _playerSettingsDocument", + "public static RuntimePlayerSettings PlayerSettings", "public static AetheriaClient ResolveClient(string stateFilePath, string runtimeId = \"\")", "public static AetheriaClient ResolveClient(AetheriaRuntimeStateBootReport stateBoot, string runtimeId = \"\")", "public static AetheriaClient CurrentClientForStateFile(string stateFilePath)", @@ -14577,7 +14578,9 @@ static void RequireRuntimeStateReaderOwnsUnityStateAcquisition(string root) "AetheriaClient", ".Aetheria()", ".Settings", - ".LatestPlayer()", + ".ReactivePlayer()", + "_playerSettingsDocument.Current", + "_playerSettingsDocument?.Dispose()", "OpenAsync(", "pullOnOpen: true", "ApplyPlayerSettings(settings, stored)" diff --git a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs index 3659d9ae9..04aa39405 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityRuntimeClientProvider.cs @@ -6,16 +6,26 @@ using System; using System.Collections.Generic; using System.IO; using GameCult.Aetheria.State.Verse; +using GameCult.Mesh; using UnityEngine; public static class AetheriaUnityRuntimeClientProvider { private static readonly Dictionary RuntimeClients = new Dictionary(StringComparer.Ordinal); + private static CultMeshReactiveDocument _playerSettingsDocument; private static RuntimePlayerSettings _runtimePlayerSettings; + private static bool _playerSettingsLoaded; - public static RuntimePlayerSettings PlayerSettings => - _runtimePlayerSettings ??= LoadPlayerSettings(); + public static RuntimePlayerSettings PlayerSettings + { + get + { + _runtimePlayerSettings ??= CreateDefaultPlayerSettings(); + RefreshPlayerSettings(_runtimePlayerSettings); + return _runtimePlayerSettings; + } + } public static AetheriaClient ResolveClient(string stateFilePath, string runtimeId = "") { @@ -60,6 +70,11 @@ public static class AetheriaUnityRuntimeClientProvider public static void Dispose() { + _playerSettingsDocument?.Dispose(); + _playerSettingsDocument = null; + _runtimePlayerSettings = null; + _playerSettingsLoaded = false; + foreach (var client in RuntimeClients.Values) client.Dispose(); RuntimeClients.Clear(); @@ -75,20 +90,25 @@ public static class AetheriaUnityRuntimeClientProvider return (stateFilePath ?? "") + "\n"; } - private static RuntimePlayerSettings LoadPlayerSettings() + private static void RefreshPlayerSettings(RuntimePlayerSettings settings) { - var settings = CreateDefaultPlayerSettings(); try { - var stored = ResolveClient(AetheriaUnityRuntimePaths.RuntimeStateFilePath) + _playerSettingsDocument ??= ResolveClient(AetheriaUnityRuntimePaths.RuntimeStateFilePath) .Aetheria() .Settings - .LatestPlayer(); + .ReactivePlayer(); + + var stored = _playerSettingsDocument.Current; if (stored == null) - return settings; + return; ApplyPlayerSettings(settings, stored); - Debug.Log("Loaded Aetheria Verse player settings from typed state."); + if (!_playerSettingsLoaded) + { + Debug.Log("Loaded Aetheria Verse player settings from reactive typed state."); + _playerSettingsLoaded = true; + } } catch (FileNotFoundException) { @@ -97,8 +117,6 @@ public static class AetheriaUnityRuntimeClientProvider { Debug.LogWarning($"Failed to load Aetheria Verse player settings from typed state; using defaults: {ex}"); } - - return settings; } private static RuntimePlayerSettings CreateDefaultPlayerSettings()