Книга: оглавление по страницам; лист прилива без лучей, пыль вверх

Оглавление показывает по 10 глав и листается «Назад/Далее»; «Оглавление»
из главы возвращает на ту же страницу. На листе Fig. VII у луны убраны лучи
(походила на солнце), некропыль поднимается просто вверх, со стрелками.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-10 13:08:30 +03:00
co-authored by Claude Opus 5.5
parent 6e1a6c0720
commit 8d1fe16cf2
4 changed files with 33 additions and 11 deletions
+33 -11
View File
@@ -143,7 +143,9 @@ namespace NecromancerTome
[Preserve] [Preserve]
public class XUiC_NecroTome : XUiController public class XUiC_NecroTome : XUiController
{ {
const int MaxButtons = 10; // было 8; девятая - кровавый прилив (10.10), кнопки btnCh1..10 в windows.xml /// <summary>Кнопок глав на странице оглавления (btnCh1..10 в windows.xml). Глав будет много (указание 10.10) -
/// оглавление листается теми же «Назад/Далее», что и главы.</summary>
const int MaxButtons = 10;
XUiV_Label _title, _text, _page; XUiV_Label _title, _text, _page;
XUiV_Texture _img; XUiV_Texture _img;
@@ -160,6 +162,9 @@ namespace NecromancerTome
/// <summary>Глава по кнопке оглавления (только открытые главы, по порядку).</summary> /// <summary>Глава по кнопке оглавления (только открытые главы, по порядку).</summary>
readonly int[] _buttonChapter = new int[MaxButtons]; readonly int[] _buttonChapter = new int[MaxButtons];
int _chapter = -1, _pageIndex; int _chapter = -1, _pageIndex;
/// <summary>Страница оглавления; «Оглавление» из главы возвращает на неё.</summary>
int _tocPage;
readonly List<int> _open = new List<int>();
public override void Init() public override void Init()
{ {
@@ -173,7 +178,7 @@ namespace NecromancerTome
_prev = GetChildById("btnPrev") as XUiC_SimpleButton; _prev = GetChildById("btnPrev") as XUiC_SimpleButton;
_next = GetChildById("btnNext") as XUiC_SimpleButton; _next = GetChildById("btnNext") as XUiC_SimpleButton;
_close = GetChildById("btnClose") as XUiC_SimpleButton; _close = GetChildById("btnClose") as XUiC_SimpleButton;
if (_toc != null) _toc.OnPressed += (_s, _m) => ShowToc(); if (_toc != null) _toc.OnPressed += (_s, _m) => ShowToc(_tocPage);
if (_prev != null) _prev.OnPressed += (_s, _m) => Turn(-1); if (_prev != null) _prev.OnPressed += (_s, _m) => Turn(-1);
if (_next != null) _next.OnPressed += (_s, _m) => Turn(1); if (_next != null) _next.OnPressed += (_s, _m) => Turn(1);
if (_close != null) _close.OnPressed += (_s, _m) => xui.playerUI.windowManager.Close(NecroTomeBook.WindowGroup); if (_close != null) _close.OnPressed += (_s, _m) => xui.playerUI.windowManager.Close(NecroTomeBook.WindowGroup);
@@ -191,25 +196,33 @@ namespace NecromancerTome
public override void OnOpen() public override void OnOpen()
{ {
base.OnOpen(); base.OnOpen();
ShowToc(); ShowToc(0);
} }
void ShowToc() void ShowToc(int _p)
{ {
_chapter = -1; _chapter = -1;
SetLabel(_title, Localization.Get("necroTomeToc")); SetLabel(_title, Localization.Get("necroTomeToc"));
SetLabel(_text, ""); SetLabel(_text, "");
SetLabel(_page, "");
SetMedia(null, null); SetMedia(null, null);
EntityPlayerLocal player = xui.playerUI.entityPlayer; EntityPlayerLocal player = xui.playerUI.entityPlayer;
int b = 0; // Открытые главы по порядку; на странице - MaxButtons из них.
for (int c = 0; c < NecroTomeBook.Chapters.Count && b < MaxButtons; c++) _open.Clear();
for (int c = 0; c < NecroTomeBook.Chapters.Count; c++)
{ {
NecroTomeBook.Chapter ch = NecroTomeBook.Chapters[c]; NecroTomeBook.Chapter ch = NecroTomeBook.Chapters[c];
if (ch.Unlocked != null && !ch.Unlocked(player)) if (ch.Unlocked == null || ch.Unlocked(player))
{ {
continue; _open.Add(c);
} }
}
int pages = Mathf.Max(1, (_open.Count + MaxButtons - 1) / MaxButtons);
_tocPage = Mathf.Clamp(_p, 0, pages - 1);
int b = 0;
for (int i = _tocPage * MaxButtons; i < _open.Count && b < MaxButtons; i++)
{
int c = _open[i];
NecroTomeBook.Chapter ch = NecroTomeBook.Chapters[c];
_buttonChapter[b] = c; _buttonChapter[b] = c;
if (_chapterButtons[b] != null) if (_chapterButtons[b] != null)
{ {
@@ -226,8 +239,13 @@ namespace NecromancerTome
} }
} }
SetVisible(_toc, false); SetVisible(_toc, false);
SetVisible(_prev, false); // Листать оглавление - только если страниц больше одной.
SetVisible(_next, false); bool many = pages > 1;
SetLabel(_page, many ? (_tocPage + 1) + " / " + pages : "");
SetVisible(_prev, many);
SetVisible(_next, many);
if (_prev != null) _prev.Enabled = _tocPage > 0;
if (_next != null) _next.Enabled = _tocPage < pages - 1;
} }
void ShowChapter(int _c, int _p) void ShowChapter(int _c, int _p)
@@ -316,6 +334,10 @@ namespace NecromancerTome
{ {
ShowChapter(_chapter, _pageIndex + _d); ShowChapter(_chapter, _pageIndex + _d);
} }
else
{
ShowToc(_tocPage + _d);
}
} }
static void SetLabel(XUiV_Label _l, string _s) static void SetLabel(XUiV_Label _l, string _s)
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 650 KiB

After

Width:  |  Height:  |  Size: 655 KiB