From 92a4654f1485b3452bdd9d8996b94713ed2632c5027a0e65c63e04e8b7c5e2a2 Mon Sep 17 00:00:00 2001 From: copecone Date: Mon, 5 Oct 2026 14:28:18 +0900 Subject: [PATCH] Add Auto UI Initialization --- Core/RenderManager.cs | 4 +++- RenderMod.cs | 7 +++---- UI/RendererUIManager.cs | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/Core/RenderManager.cs b/Core/RenderManager.cs index 6a08601..0c08f0b 100644 --- a/Core/RenderManager.cs +++ b/Core/RenderManager.cs @@ -9,6 +9,7 @@ using System.Linq; using ADOFAIRenderer.API; using ADOFAIRenderer.Data; using ADOFAIRenderer.UI; +using ADOFAIRenderer.UI.Window; using ADOFAIRenderer.Util; using ADOFAIRenderer.Util.Audio; using ADOFAIRenderer.Util.FFmpeg; @@ -336,7 +337,8 @@ internal class RenderManager : MonoBehaviour (Func)Delegate.CreateDelegate(typeof(Func), scnEditor.instance, targetMethod); Application.wantsToQuit -= quitDelegate; - ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "Assets/Scenes/RenderSettingsScene.unity"); + RenderConfigWindow.CreateWindow(); + // ADOBase.loader.LoadSceneWithTransition(WipeDirection.StartsFromRight, "Assets/Scenes/RenderSettingsScene.unity"); }); } diff --git a/RenderMod.cs b/RenderMod.cs index 9be8d8f..002bf3b 100644 --- a/RenderMod.cs +++ b/RenderMod.cs @@ -19,8 +19,6 @@ internal class RenderMod : MelonMod { public static AssetBundle FontBundle = null!; // ReSharper disable once MemberCanBePrivate.Global - public static AssetBundle SceneBundle = null!; - // ReSharper disable once MemberCanBePrivate.Global public static AssetBundle ShaderBundle = null!; public static ComputeShader ColorConversionShader = null!; public static bool IsFeatureDisabled = false; @@ -33,19 +31,20 @@ internal class RenderMod : MelonMod var renderManagerObj = new GameObject("Render Manager"); var updateHookerObj = new GameObject("Update Hooker"); + var uiManagerObj = new GameObject("Renderer UI Manager"); Object.DontDestroyOnLoad(renderManagerObj); Object.DontDestroyOnLoad(updateHookerObj); + Object.DontDestroyOnLoad(uiManagerObj); renderManagerObj.AddComponent(); updateHookerObj.AddComponent(); + uiManagerObj.AddComponent(); LoadBundles(); } private static void LoadBundles() { FontBundle = BundleLoader.GetBundle("fonts"); - SceneBundle = BundleLoader.GetBundle("scenes"); - SceneBundle.GetAllScenePaths(); try { ShaderBundle = BundleLoader.GetBundle("shaders"); diff --git a/UI/RendererUIManager.cs b/UI/RendererUIManager.cs index 593e7c3..181da56 100644 --- a/UI/RendererUIManager.cs +++ b/UI/RendererUIManager.cs @@ -1,4 +1,4 @@ -using O5Kit.Core; +using O5Kit.Core; namespace ADOFAIRenderer.UI; @@ -6,15 +6,32 @@ using UnityEngine; public class RendererUIManager : MonoBehaviour { - public static RendererUIManager Instance { get; private set; } = null!; + private static RendererUIManager? _instance; + public static RendererUIManager Instance + { + get + { + if (_instance == null) + { + var go = new GameObject("RendererUIManager"); + DontDestroyOnLoad(go); + _instance = go.AddComponent(); + } + return _instance; + } + private set => _instance = value; + } - public static O5Context Context = null!; - public O5WindowManager WindowManager = null!; + public static O5Context Context => Instance._context; + public O5WindowManager WindowManager => _windowManager; + + private O5Context _context = null!; + private O5WindowManager _windowManager = null!; private void Awake() { - Instance = this; + _instance = this; - Context = new O5Context( + _context = new O5Context( config: new O5Config { UIScale = 1.0f, MiddleClickToDefault = true, @@ -23,7 +40,7 @@ public class RendererUIManager : MonoBehaviour theme: O5Theme.Dark ); - WindowManager = O5WindowManager.Create(Context, transform, "RendererMod_Canvas"); + _windowManager = O5WindowManager.Create(_context, transform, "RendererMod_Canvas"); } private void Update() { @@ -33,7 +50,9 @@ public class RendererUIManager : MonoBehaviour } private void OnDestroy() { - WindowManager.Dispose(); - Context.Dispose(); + _windowManager.Dispose(); + _context.Dispose(); + + if (_instance == this) _instance = null; } } \ No newline at end of file