using System;
using System.Collections.Generic;
using System.Linq;
using Decentralized.Domain;
using UnityEngine;
namespace Decentralized
{
///
/// 显卡鉴定指南:游戏的纸质指南(PaperUI),版式和原版鉴定指南一致——笔记本背景、委员会页眉、居中标题、
/// 插图加图注、“价格不变 / -n%”的折价标注、末页的鉴定示例。第一次打开时按当前语言生成并登记,语言变了重新生成。
/// 坐标是设计单位(314×402,屏幕上放大 2 倍)。
///
public static class GpuGuide
{
public const string BookId = "gpu_guide";
private const float X = 35f, W = 253f, Top = 80f, Bottom = 368f;
private const string Ink = "#221C1A", Good = "#3F7D4B", Bad = "#9E1F1A";
private static string _locale;
private static LoadedMod _mod;
public static void OnAssetsLoaded(LoadedMod mod)
{
if (mod?.Manifest?.ID == ModInfo.Id) _mod = mod;
}
/// 原版背景、按钮和页眉图按名字找不到时(纸张素材目录没打包),把内存里同名的原版精灵登记给本 mod。
private static void ProvideMissingPaperSprites()
{
if (_mod == null) return;
foreach (var sprite in Resources.FindObjectsOfTypeAll())
{
string n = sprite.name;
if (n != "notebook_manual" && n != "guide_logo" && !n.StartsWith("paper_buttons")) continue;
if (_mod.PaperSprites.ContainsKey(n) || PaperAssets.FindInCatalog(n) != null) continue;
_mod.PaperSprites[n] = sprite;
}
}
public static void Open(int page = 0)
{
try
{
if (_locale != L.Code || !ModHelper.GetPaperBookIds(ModInfo.Id).Contains(BookId)) Register();
var ui = ModHelper.OpenPaper(ModInfo.Id, BookId);
if (ui == null) { Log.Warn("[GpuGuide] 打不开鉴定指南"); return; }
ui.FlipTo(page);
RaiseAboveModWindows(ui);
}
catch (Exception ex) { Log.Error("[GpuGuide] " + ex); }
}
/// 纸质画布在 mod 窗口所在的层下面:从终端里打开时会被盖住,打开期间调到上面,关上时恢复。
private static void RaiseAboveModWindows(PaperUI ui)
{
var canvas = ui.Root != null ? ui.Root.GetComponentInParent