Danro-Jump/README.md
Danil Iarosh c1b72854f4 Implement prize QR and service UI polish
Подробные изменения:

- Добавлена система призовых уровней и выдачи призов с QR-контуром Telegram, шаблоном сообщения и генерацией QR без внешних библиотек.

- Доработаны сервисные настройки: действия кнопок, модальные окна, ввод с джойстика/клавиатуры, статистика, настройки призов и маршрутизация QR.

- Переработаны gameplay HUD и overlay-панели на UI Toolkit со спрайтовыми плашками, DEV BUILD-статистикой, экраном продолжения и экраном результата приза.

- Исправлены сценарии смерти, GameOver, продолжения игры, начисления очков за высоту и перехода в главное меню.

- Перенесены UI-шаблоны из Resources в Assets/UI, подключена Addressables-загрузка шаблонов настроек и standalone-стили для MainMenuModals.

- Добавлены EditMode/PlayMode тесты для призов, QR, arcade input, UI-модалок, scene flow, HUD и gameplay-сессии.

- Обновлены сцены, настройки Addressables, service settings database, документация и дорожная карта.

Проверки:

- Targeted EditMode QR/UI/settings: 23/23 passed

- Targeted UI templates/EditMode: 17/17 passed

- MainMenuUxmlTests: 3/3 passed

- Full EditMode: 129/129 passed

- PlayMode: 6/6 passed

- Runtime Addressables template load check: loaded=5

- Unity Console после финального refresh: 0 errors
2026-06-12 16:43:28 +03:00

125 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Danro Jump
`Danro Jump` — Unity-проект вертикального платформера в духе `Doodle Jump`, развиваемый как коммерчески применимая игровая система с аппаратной интеграцией, денежным балансом, призовой витриной, выдачей QR-призов и сервисным контуром для обслуживающего персонала.
Проект ориентирован не только на аркадный игровой цикл, но и на эксплуатацию на целевом автомате: запуск через защищённый startup-flow, работу с внешними устройствами по `COM`, настройку экономики без пересборки, диагностику, выдачу призов и сохранение важных эксплуатационных данных.
## Целевая концепция
Основные направления продукта:
- быстрый вертикальный платформер с короткой игровой сессией;
- рост высоты, набор очков, монет и прогрессирующая сложность;
- денежный баланс для платного старта и `continue`;
- интеграция с внешним оборудованием по `COM`-порту;
- выдача малых и больших призов через призовую витрину;
- выдача призов или бонусов через `QR`-коды;
- сервисное меню для персонала с настройками, статистикой и служебными действиями;
- подготовка к длительной работе на целевом автомате.
## Текущий статус
Текущая рабочая версия содержит широкий gameplay-, экономический и infrastructure-контур:
- Unity `6000.4.9f1`;
- сцены `Bootstrap`, `MainMenu` и `Game` добавлены в Build Settings;
- старт приложения проходит через `Bootstrap` и сервисные runtime-системы;
- настроены `Extenject`, `ProjectContext`, scene installers и `SceneFlowService`;
- есть главное меню на UI Toolkit с правилами, настройками, фокусом клавиатуры/геймпада и переходом в игру;
- реализован вертикальный gameplay loop: игрок, камера, прыжки, платформы, смерть, respawn, game over и возврат в меню;
- есть HUD для счёта, высоты, рекорда, жизней, монет, смертей и состояния сессии;
- реализованы платформы, оборудование, коллектаблы, враги, weighted-spawn и ScriptableObject-прогрессия сложности;
- реализован и стабилизирован джетпак с подъёмом, блокировкой контактов, attach/detach, падением и VFX;
- есть COM-система: serial-транспорт, авторизация, роли устройств, входные биты, ADC, платёжные импульсы, денежный баланс, статусы призовых ячеек и команды открытия;
- есть кастомное устройство Input System для COM-контроллера;
- платный старт и continue через денежный баланс со списанием и проверкой достаточности;
- призовой flow: `PrizeFlowService` оценивает сессию по таблице призовых уровней и определяет тип награды;
- экраны continue (`ContinueGameOverlayWindow`) и результата приза (`PrizeResultOverlayWindow`);
- таблица призовых уровней с JSON-сериализацией и CRUD через сервисное меню;
- сервисное меню с маршрутизацией кнопок: статистика, настройки призов, QR, витрина, телефон, суперприз, поддержка, валюта, тест выдачи;
- модальные окна: настройки, правила, информационные, текстовый ввод, таблица и добавление призовых уровней;
- сервисные настройки загружаются через Addressables/fallback, сохраняются в JSON и доступны через UI;
- есть debug-модуль с каналами логирования, Unity Console/file handlers и development overlay;
- заведены EditMode и PlayMode-тесты для ключевых подсистем.
## Архитектура
### Gameplay
- `GameplaySession` — управляет состоянием забега: очки, монеты, жизни, смерти, высота, рекорд, continue и призовой flow
- `PlatformSpawner` / `PlatformContentSpawner` — спавн платформ и контента по весовым профилям
- `GameplayDifficultyProgression` — ScriptableObject-прогрессия сложности по этапам
- `JumpPlayerController` — управление игроком, прыжки, смерть, respawn
- `VerticalCameraFollow` — вертикальное слежение за игроком
### Экономика и призы
- `PrizeFlowService` / `IPrizeFlowService` — оценка завершённой сессии и определение типа награды
- `PrizeLevelTable` — таблица призовых уровней с привязкой к порогам очков (JSON)
- `PrizeRewardKind` — типы наград: `None`, `Small`, `Big`, `QRCode`, `Hopper`, `PrizeStand`
- `PrizeResultOverlayWindow` — полноэкранный результат выдачи приза
- `ContinueGameOverlayWindow` — экран предложения продолжить игру за баланс
### Сервисное меню
- `SettingsModalWindow` — динамическое построение UI настроек из `ServiceSettingsDatabase`
- `ServiceSettingsActionRouter` — маршрутизация кнопок сервисного меню в действия
- `PrizeLevelsModalWindow` / `PrizeLevelAddModalWindow` — управление таблицей призовых уровней
- `ServiceTextInputModalWindow` — текстовый ввод для телефонов и строковых настроек
- `ServiceInfoModalWindow` — отображение результатов сервисных действий
- `ModalStackController` — управление стеком модальных окон
### Аппаратура
- `ComSystem` — управление COM-устройствами: авторизация, кредиты, ввод, подсветка, призовая витрина
- `ComLightingSystem` — аппаратная подсветка: board effects, hat blink, prize showcase
- `ComControllerInputBridge` — кастомное устройство Input System для COM-контроллера
- `ReflectionSerialComTransport` / `ReflectionComPortProvider` — транспортный слой через System.IO.Ports
### Инфраструктура
- `BootstrapEntryPoint` / `StartupProtectionService` — защищённый startup-flow
- `SceneFlowService` — централизованная загрузка сцен
- `ServiceSettingsService` — чтение, применение и сохранение сервисных настроек
- `DebugLogService` — каналы логирования, Unity Console и файловый handler
## Технологическая база
- Unity 6;
- Universal Render Pipeline для 2D;
- Input System;
- UI Toolkit;
- Test Framework;
- Extenject;
- UniTask;
- Addressables;
- DOTween;
- NuGet for Unity;
- локальная документация и проектные гайды в `GUIDES`.
## Структура репозитория
- `Assets/Scripts/Runtime/` — runtime-код, разбитый по подсистемам: `Gameplay`, `Hardware/Com`, `Prizes`, `Settings`, `UI`, `Bootstrap`, `SceneFlow`, `Debugging`;
- `Assets/Scripts/Editor/` — редакторские расширения;
- `Assets/Tests/` — EditMode и PlayMode тесты;
- `Assets/Scenes/` — сцены `Bootstrap`, `MainMenu`, `Game`;
- `Packages/` — зависимости проекта и пакетная конфигурация Unity;
- `ProjectSettings/` — настройки Unity-проекта;
- `GUIDES/` — проектные гайды по архитектуре, пакетам, workflow и инфраструктуре;
- `ROADMAP.md` — актуальная дорожная карта проекта;
- `.codex/` — локальные настройки агентной работы и RAG/MCP-инфраструктуры.
## Legacy reference
В `Assets/Temp/Legacy` сохранён архив старых материалов, которые используются как reference для миграции идей, API и сценариев. Этот код не следует подключать к runtime целиком.
Наиболее ценные направления для аккуратного переиспользования:
- аппаратный слой и COM-протокол;
- призовая витрина;
- QR-выдача;
- сервисные настройки;
- статистика и эксплуатационные UI-сценарии.
Перенос должен идти через новые интерфейсы, сервисы и UI-представления проекта, а не через прямой импорт старых managers/controllers.