Block the editor with a spinner and percent stages during material upsert so long image optimization is visible and non-interactive.
Co-authored-by: Cursor <cursoragent@cursor.com>
Deselect effect tools by default and on re-click, block the editor during session launch, and fix NPC overlay/window empty-state layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire mimic/pit/arrow/laser media on activate, poison/explosion via effects, and document the scene editor and traps in Instructions.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add trap overlays with session state, material legend editor/panel, and a dedicated scene editor window wired through IPC and project persistence.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip full project broadcast on graph/NPC position commits, send session.stateChanged only to consumer windows, and force one Pixi render before stopping the idle ticker so Clear effects actually clears the canvas.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move audio scrub/volume and brush drafts off root React ticks, coalesce overlay layout IPC, cache machine fingerprint and asset URLs, share one scene overlay host, and stop idle Pixi ticker. Also harden console against EPIPE on window load failures.
Co-authored-by: Cursor <cursoragent@cursor.com>
Nested NPC groups with color, graph filter, and scene/storyline binding; Foundry worlds/modules import actors into groups; storyline merge asks on NPC name conflicts and reports NPC counts.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add a dedicated NPC editor window, directed relations, control/presentation avatar overlay, and ru/en help for the new section.
Co-authored-by: Cursor <cursoragent@cursor.com>
Let GMs manage and show images over the scene from the editor and control panel, with zoom tools, help docs, and full ru/en i18n.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add TipTap editing in the editor and an Electron window on the control panel to read the current scene description.
Co-authored-by: Cursor <cursoragent@cursor.com>
Можно перетащить изображения/видео в колонку сцен: создаются новые сцены
с превью и названием из файла, с полноэкранным прогрессом и отчётом о
пропущенных файлах.
Добавлен ручной порядок сцен в списке (sceneListOrder) с сохранением в
проект; перетаскивание карточек отделено от импорта файлов. Во время
сортировки снова работает скролл колесом.
Исправлен залипающий disabled у «+ Новая сцена» после создания сцены.
Co-authored-by: Cursor <cursoragent@cursor.com>
Добавлена загрузка файлов перетаскиванием в блоки «Аудио игры», «Аудио сцены»
и «Превью сцены»: подсветка зоны, подсказки, фильтрация по типу, импорт без диалога.
IPC и main принимают пути файлов напрямую; для Electron 41 пути получаются через
webUtils.getPathForFile в preload (File.path в renderer больше недоступен).
Улучшен dev-запуск: Vite слушает 127.0.0.1, ожидание готовности по localhost.
Co-authored-by: Cursor <cursoragent@cursor.com>
Добавлена полноценная поддержка побочных сюжетных линий в редакторе и на
пульте: визуальное выделение компонент графа, запрет недопустимых связей
между основной и побочными линиями, метки «ПОБОЧНАЯ» и названия линий.
Реализован partial export/import сюжетных линий:
- экспорт выбранных линий в урезанный .ttrpg.zip с manifest в project.json;
- импорт в открытый проект с выбором линий, разрешением конфликтов названий
сцен (одна модалка на операцию) и отчётом о результате;
- новое окно источника импорта: «Из проекта» (dropdown, без текущего) или
«Из файла»; на главном экране — только полный импорт из файла.
Исправлены гонки при открытии/закрытии проекта (сериализация open/close в
main, сброс зависших состояний UI), залипание оверлея прогресса экспорта и
старт Electron в dev после готовности Vite.
Добавлены unit-тесты для lineage, export/import и контрактов zipStore.
Co-authored-by: Cursor <cursoragent@cursor.com>
Return control after copying the original asset, then run image optimization
and thumbnail generation in the background with IPC progress updates.
Block duplicate preview uploads and scene creation while requests are in flight.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add darkenScene with Opening brush in presentation, persist reveal strokes per scene during a session, and close projects properly on return to home. Harden dnd asset streaming to avoid Windows main-process crashes when reopening projects.
Co-authored-by: Cursor <cursoragent@cursor.com>
Rename product to TTRPG Player (TTRPGPlayer / com.ttrpgplayer.app), use .ttrpg.zip for new saves while keeping .dnd.zip import, accept TTRPG- and DND- license keys on client, and remove sync-update-feed plus CI push to DndGamePlayerUpdates.
Co-authored-by: Cursor <cursoragent@cursor.com>
RotatedImage: размер контейнера через clientWidth/Height (не getBoundingClientRect), чтобы cover при 90°/270° работал под zoom React Flow; убраны отладочные логи.
Главное меню в dev: пункт «Вид» с DevTools (Ctrl+Shift+I без пустого application menu).
Список проектов: project.list без лицензии; список подгружается при неактивной лицензии; ProjectPicker с подсказками; listProjects пропускает битые zip.
Сохранение проектов: atomicReplace — замена zip без rm до commit; восстановление *.dnd.zip.tmp при старте; тесты.
EditorApp: блокировка UI при открытых окнах презентации и пульта; стили оверлея.
Made-with: Cursor
- Keep game/campaign audio assets referenced (no prune)
- Flush pending project save on quit/switch/export to avoid losing campaignAudios
- Control: prevent game music restarts on scene changes; allow always-on controls; handle autoplay-after-scene-audio
- Editor: reduce ReactFlow churn with stable scene card map; lazy/async image decode
- Add contract/unit tests and update test script
Made-with: Cursor
- Make license status snapshot non-blocking (revocation check in background)
- Speed boot by not awaiting license network and capping editor ready wait
- Stop disabling GPU by default on Win packaged builds
- Remove external font fetch; bundle local Inter
Made-with: Cursor
- Экран загрузки (boot.html, bootWindow): статусы, ensureRoots и проверка лицензии, редактор после готовности; закрытие через destroy при closable:false.
- Упакованное приложение на Windows: disableHardwareAcceleration, sandbox выкл. вне dev, отложенный показ редактора, ensureWindowBecomesVisible, фокус на splash при second-instance.
- Vite: вход boot.html; eslint: игнор release/; тесты boot и maxFPS тикера.
- Пульт: позиция курсора кисти через ref/DOM без setState на каждый move; черновик эффекта через rAF; Pixi: maxFPS 32, resolution cap, antialias off, debounce ResizeObserver, меньше частиц poisonCloud, contain на хосте.
Made-with: Cursor
- Main: license service, IPC, router; закрытие окон; yauzl закрытие zip (EMFILE), zipRead тест
- Editor: стабильный projectState без мигания, логотип и меню, строки UI, LayoutShell overlay
- Control: ластик для всех типов эффектов, затухание/нарастание музыки при смене сцены
- Сборка: vite, build/dev scripts, obfuscate-main и build-env скрипты с тестами; package.json
Made-with: Cursor
- Копировать build/icon.png в dist/renderer/app-pack-icon.png после Vite
- Приоритет pack PNG для BrowserWindow; на win32/linux без SVG в nativeImage
- macOS: app.dock.setIcon из того же набора PNG
- package-lock.json в соответствии с package.json
Made-with: Cursor