feat(players): app Players library and circular NPC tokens on scenes

Add userData players/teams, scene npcTokens with hex-inscribed sizing, session scale synced to presentation, and Playwright e2e coverage.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-30 13:38:35 +08:00
parent a3a03eb9e3
commit 101f595bac
57 changed files with 4176 additions and 317 deletions
+2 -2
View File
@@ -18,6 +18,7 @@ const RU_TITLES: Record<HelpSectionId, string> = {
tokens: 'Неигровые токены',
campaignAudio: 'Аудио игры',
materials: 'Материалы',
players: 'Игроки',
npcs: 'НПС',
session: 'Запуск сессии',
controlPanel: 'Пульт управления',
@@ -31,8 +32,7 @@ const RU_TITLES: Record<HelpSectionId, string> = {
void test('findHelpLinkRanges: «Ловушки» и алиас «Эффекты»', () => {
const catalog = buildHelpLinkCatalog((id) => RU_TITLES[id]);
const text =
'см. «Ловушки» и кистью (см. «Эффекты»). Также разделы «Генератор сетки», «Неигровые токены».';
const text = 'см. «Ловушки» и кистью (см. «Эффекты»). Также разделы «Генератор сетки», «Неигровые токены».';
const ranges = findHelpLinkRanges(text, catalog);
assert.deepEqual(
ranges.map((r) => r.id),
+1
View File
@@ -9,6 +9,7 @@ export const HELP_SECTION_LINK_ALIASES: Partial<Record<HelpSectionId, readonly s
presentation: ['Презентация', 'Presentation'],
grid: ['Сетка', 'Grid'],
controlPanel: ['Пульт'],
players: ['Игроки', 'Players'],
};
export type HelpLinkCatalogEntry = {
+1
View File
@@ -13,6 +13,7 @@ export const HELP_SECTION_IDS = [
'tokens',
'campaignAudio',
'materials',
'players',
'npcs',
'session',
'controlPanel',