SHA256
116 lines
4.3 KiB
C#
116 lines
4.3 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>("NanumSquareNeoOTF-Bd SDF");
|
|
NanumSquareNeoBold = FontBundle.LoadAsset<TMP_FontAsset>("NanumSquareNeoOTF-Eb SDF");
|
|
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
|
|
{
|
|
public static RendererUIManager Instance = null!;
|
|
|
|
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 with
|
|
{
|
|
PanelBG = new Color(0.067f, 0.067f, 0.067f, 1f),
|
|
TopBar = new Color(0f, 0f, 0f, 0.6f),
|
|
MenuBG = new Color(0f, 0f, 0f, 0.6f),
|
|
MenuHover = new Color(1.000f, 0.294f, 0.079f, .6f),
|
|
ObjectBG = new Color(0f, 0f, 0f, 1f),
|
|
ObjectButton = new Color(0f, 0f, 0f, 1f),
|
|
ObjectActive = new Color(1.000f, 0.294f, 0.079f, 1f),
|
|
ObjectActiveBright = new Color(1.000f, 0.294f, 0.079f, 1f),
|
|
ControlOutlineIdle = new Color(1f, 1f, 1f, 0.4f),
|
|
ButtonHover = new Color(0.133f, 0.133f, 0.133f, 1.0f),
|
|
ControlOutlineHover = new Color(1f, 1f, 1f, 0.4f),
|
|
CardHeader = new Color(0.157f, 0f, 0f, 1f),
|
|
CardPanel = new Color(0, 0, 0, 0f),
|
|
SoftRed = new Color(1.000f, 0.576f, 0.590f, 1f),
|
|
MathOk = new Color(0.408f, 0.827f, 0.569f, 1f),
|
|
MathWarn = new Color(0.964f, 0.647f, 0.315f, 1f),
|
|
MathErr = new Color(1.000f, 0.576f, 0.590f, 1f),
|
|
CornerRadius = 12, OutlineWidth = 2, ControlHeight = 40, FontSizeBody = 18, FontSizeH1 = 48,
|
|
Outline = new Color(1f, 1f, 1f, 0.2f),
|
|
TextDimAlpha = 1f
|
|
},
|
|
fonts: new RendererFontProvider()
|
|
);
|
|
|
|
_windowManager = O5WindowManager.Create(_context, transform, "RendererMod_Canvas");
|
|
|
|
// The O5Kit canvas is created with sortingOrder 32767. It is lowered so that the dialogs of
|
|
// CommonWarningDialogUI (32766) are drawn above the windows of this manager.
|
|
var windowCanvas = transform.Find("RendererMod_Canvas")?.GetComponent<Canvas>();
|
|
if (windowCanvas != null) windowCanvas.sortingOrder = WindowCanvasSortingOrder;
|
|
}
|
|
|
|
private const int WindowCanvasSortingOrder = 32000;
|
|
|
|
private void Update() {
|
|
O5Object.TickAll();
|
|
Context.Tooltip.Tick();
|
|
O5Kit.Input.O5ShortcutManager.HandleUpdate();
|
|
}
|
|
|
|
private void OnDestroy() {
|
|
_windowManager.Dispose();
|
|
_context.Dispose();
|
|
}
|
|
} |