using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Decentralized.Domain;
namespace Decentralized
{
/// Web3 手册阅读窗口:左边章节列表,右边章节全文。章节在本地化文本里用 § 分隔,章节名取第一个冒号或括号之前。
public static class HandbookWindow
{
public const string Id = "pd_handbook";
private const float WinW = 828f, WinH = 680f, ScreenW = 768f, ScreenH = 578f, Bezel = 6f;
private static float ListW => L.Wide ? 276f : 190f;
private static float RowW => L.Wide ? ListW - 52f : ListW - 12f;
private static float TextW => L.Wide ? 456f : 540f;
private static int _chapter;
private static readonly List _picked = new List();
private static readonly List _clear = new List();
private static readonly List _rows = new List();
private static string Title(string chapter)
{
int end = chapter.Length;
foreach (var m in new[] { ":", ": ", "(", " (" })
{
int i = chapter.IndexOf(m, StringComparison.Ordinal);
if (i > 0 && i < end) end = i;
}
return chapter.Substring(0, end);
}
private static string Body(string chapter)
{
foreach (var m in new[] { ":", ": " })
{
int i = chapter.IndexOf(m, StringComparison.Ordinal);
int p = chapter.IndexOf("(", StringComparison.Ordinal);
if (i > 0 && (p < 0 || i < p || p > 40)) return chapter.Substring(i + m.Length);
}
return chapter;
}
public static void Open()
{
var chapters = TuningText.Render(L.T("guide.web3.text")).Replace("¶", "\n\n").Split('§');
if (_chapter >= chapters.Length) _chapter = 0;
var b = CustomUIManager.Window(Id, L.T("item.web3guide.name"));
if (b == null) return;
_picked.Clear(); _clear.Clear(); _rows.Clear();
b.SetSize(WinW, WinH).SetDraggable(true).SetCloseOnEscape(true).UseMachineryStyle();
b.BeginPanel(ScreenW + Bezel * 2, ScreenH + Bezel * 2, TextAnchor.MiddleCenter, Bezel + 3f, 0f);
var bezel = b.Last.image;
b.BeginPanel(ScreenW, ScreenH, TextAnchor.UpperLeft, 12f, 4f);
var screen = b.CurrentContainer;
var paper = b.Last.image;
b.BeginRow(10f);
b.BeginPanel(ListW, -1f, TextAnchor.UpperLeft, 0f, 0f);
_clear.Add(b.Last.image);
b.BeginScroll(ScreenH - 30f);
_clear.Add(b.Last.image);
for (int i = 0; i < chapters.Length; i++)
{
int k = i;
PledgerSkin.TableRow(b, RowW, 30f, new[] { RowW }, new[] { TextAnchor.MiddleLeft },
new[] { Title(chapters[i]) }, i == _chapter, () => { _chapter = k; Open(); }, _rows, _clear);
}
b.End();
b.End();
b.BeginPanel(TextW, -1f, TextAnchor.UpperLeft, 6f, 6f);
_clear.Add(b.Last.image);
b.BeginScroll(ScreenH - 30f);
_clear.Add(b.Last.image);
b.AddHeader(Title(chapters[_chapter]));
b.AddSeparator();
b.AddLabel(Body(chapters[_chapter]));
b.End();
b.End();
b.End();
b.End();
b.End();
var win = b.Show();
Log.Guard("手册外观", () => PledgerSkin.Apply(win, screen, bezel, paper, _picked, _clear, _rows));
}
}
}