using System.Diagnostics.CodeAnalysis; using ADOFAIRenderer.Util; using MelonLoader; using O5Kit.Core; using TMPro; namespace ADOFAIRenderer.UI; using UnityEngine; [SuppressMessage("ReSharper", "MemberCanBePrivate.Global")] internal static class ModAssets { public static void Load() { FontBundle = BundleLoader.GetBundle("fonts"); NanumSquareNeoNormal = FontBundle.LoadAsset("NanumSquareNeoOTF-Bd SDF"); NanumSquareNeoBold = FontBundle.LoadAsset("NanumSquareNeoOTF-Eb SDF"); Melon.Logger.Msg("Fonts loaded successfully."); ShaderBundle = BundleLoader.GetBundle("shaders"); ColorConversionShader = ShaderBundle.LoadAsset("ColorConversion"); Melon.Logger.Msg("Shader loaded successfully."); } public static AssetBundle FontBundle = null!; public static AssetBundle ShaderBundle = null!; public static TMP_FontAsset NanumSquareNeoNormal = null!; public static TMP_FontAsset NanumSquareNeoBold = null!; public static ComputeShader ColorConversionShader = null!; } internal sealed class RendererFontProvider : IFontProvider { private static readonly DefaultFontProvider DefaultFontProvider = new(); private bool _disposed; public TMP_FontAsset Regular => ModAssets.NanumSquareNeoNormal; public TMP_FontAsset Medium => ModAssets.NanumSquareNeoBold; public TMP_FontAsset Monospace => DefaultFontProvider.Monospace; public void Dispose() { if (_disposed) return; _disposed = true; } } internal class RendererUIManager : MonoBehaviour { private static RendererUIManager? _instance; public static RendererUIManager Instance { get { if (_instance != null) return _instance; var go = new GameObject("RendererUIManager"); DontDestroyOnLoad(go); _instance = go.AddComponent(); return _instance; } } public static O5Context Context => Instance._context; public O5WindowManager WindowManager => _windowManager; private O5Context _context = null!; private O5WindowManager _windowManager = null!; private void Awake() { _instance = this; _context = new O5Context( config: new O5Config { UIScale = 1.0f, MiddleClickToDefault = true, SliderSensitivity = 1.0f }, theme: O5Theme.Dark, fonts: new RendererFontProvider() ); _windowManager = O5WindowManager.Create(_context, transform, "RendererMod_Canvas"); } private void Update() { O5Object.TickAll(); Context.Tooltip.Tick(); O5Kit.Input.O5ShortcutManager.HandleUpdate(); } private void OnDestroy() { _windowManager.Dispose(); _context.Dispose(); if (_instance == this) _instance = null; } }