Книга: оглавление по страницам; лист прилива без лучей, пыль вверх
Оглавление показывает по 10 глав и листается «Назад/Далее»; «Оглавление» из главы возвращает на ту же страницу. На листе Fig. VII у луны убраны лучи (походила на солнце), некропыль поднимается просто вверх, со стрелками. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6e1a6c0720
commit
8d1fe16cf2
+33
-11
@@ -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 |
Reference in New Issue
Block a user