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

Оглавление показывает по 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]
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_Texture _img;
@@ -160,6 +162,9 @@ namespace NecromancerTome
/// <summary>Глава по кнопке оглавления (только открытые главы, по порядку).</summary>
readonly int[] _buttonChapter = new int[MaxButtons];
int _chapter = -1, _pageIndex;
/// <summary>Страница оглавления; «Оглавление» из главы возвращает на неё.</summary>
int _tocPage;
readonly List<int> _open = new List<int>();
public override void Init()
{
@@ -173,7 +178,7 @@ namespace NecromancerTome
_prev = GetChildById("btnPrev") as XUiC_SimpleButton;
_next = GetChildById("btnNext") 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 (_next != null) _next.OnPressed += (_s, _m) => Turn(1);
if (_close != null) _close.OnPressed += (_s, _m) => xui.playerUI.windowManager.Close(NecroTomeBook.WindowGroup);
@@ -191,25 +196,33 @@ namespace NecromancerTome
public override void OnOpen()
{
base.OnOpen();
ShowToc();
ShowToc(0);
}
void ShowToc()
void ShowToc(int _p)
{
_chapter = -1;
SetLabel(_title, Localization.Get("necroTomeToc"));
SetLabel(_text, "");
SetLabel(_page, "");
SetMedia(null, null);
EntityPlayerLocal player = xui.playerUI.entityPlayer;
int b = 0;
for (int c = 0; c < NecroTomeBook.Chapters.Count && b < MaxButtons; c++)
// Открытые главы по порядку; на странице - MaxButtons из них.
_open.Clear();
for (int c = 0; c < NecroTomeBook.Chapters.Count; 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;
if (_chapterButtons[b] != null)
{
@@ -226,8 +239,13 @@ namespace NecromancerTome
}
}
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)
@@ -316,6 +334,10 @@ namespace NecromancerTome
{
ShowChapter(_chapter, _pageIndex + _d);
}
else
{
ShowToc(_tocPage + _d);
}
}
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