SHA256
forked from ADOFAIEditorForum/ADOFAIRenderer
102 lines
3.0 KiB
C#
102 lines
3.0 KiB
C#
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<TMP_FontAsset>("Assets/Fonts/NanumSquareNeoOTF-Bd SDF.asset");
|
|
NanumSquareNeoBold = FontBundle.LoadAsset<TMP_FontAsset>("Assets/Fonts/NanumSquareNeoOTF-Hv SDF.asset");
|
|
Melon<RenderMod>.Logger.Msg("Fonts loaded successfully.");
|
|
|
|
ShaderBundle = BundleLoader.GetBundle("shaders");
|
|
ColorConversionShader = ShaderBundle.LoadAsset<ComputeShader>("ColorConversion");
|
|
Melon<RenderMod>.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<RendererUIManager>();
|
|
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;
|
|
}
|
|
} |