{ "nodes":[ {"id":"root","type":"text","text":"# 🏎️ Пинбол: Дистанционное управление (Sensors-to-Game)\n\nКонцепция игры, где смартфон выступает в роли физического контроллера, передавая наклон и ускорение на основной игровой экран через браузер.","x":0,"y":0,"width":450,"height":180,"color":"4"}, {"id":"controller-title","type":"text","text":"# 📱 Смартфон-контроллер (Frontend)","x":-550,"y":-350,"width":400,"height":80,"color":"1"}, {"id":"ctrl-1","type":"text","text":"## 📡 Получение данных сенсоров\n\n- **DeviceOrientationEvent**: Получение углов наклона (alpha, beta, gamma).\n- **DeviceMotionEvent**: Регистрация резких встряхиваний (акселерометр) для «ударов» по столу.\n- **Permissions API**: Обработка запроса разрешений (обязательно для iOS 13+).\n- **Фильтрация**: Использование фильтра низких частот (Low-pass filter) для сглаживания «шума» сенсоров.","x":-550,"y":-250,"width":400,"height":250,"color":"1"}, {"id":"ctrl-2","type":"text","text":"## 🎨 Интерфейс управления\n\n- **Визуальный фидбек**: Отображение 3D-модели смартфона, повторяющей наклоны.\n- **Haptic Feedback**: Вибрация при столкновении мяча с флиппером.\n- **Калибровка**: Кнопка «Центрировать», чтобы установить текущее положение как нулевое.","x":-550,"y":30,"width":400,"height":180,"color":"1"}, {"id":"ctrl-3","type":"text","text":"## 🔋 Оптимизация\n\n- **Wake Lock API**: Предотвращение выключения экрана во время игры.\n- **Throttling**: Ограничение частоты отправки данных (например, 60 раз в секунду).","x":-550,"y":240,"width":400,"height":140,"color":"1"}, {"id":"game-title","type":"text","text":"# 🖥️ Игровой Движок (Display)","x":550,"y":-350,"width":450,"height":80,"color":"2"}, {"id":"game-1","type":"text","text":"## 🏗️ Физика (Matter.js / P2.js)\n\n- **Гравитация**: Динамическое изменение вектора гравитации в зависимости от наклона телефона игрока.\n- **Коллизии**: Группы столкновений для мячей, стенок и флипперов.\n- **Friction/Restitution**: Настройка упругости для эффекта «пинбола».","x":550,"y":-250,"width":450,"height":200,"color":"2"}, {"id":"game-2","type":"text","text":"## 🎮 Игровые Механики\n\n- **PvP Режим**: Поле разделено на две части. Цель — загнать мяч в ворота противника.\n- **Power-ups**: Появление бонусов (увеличение мяча, замедление времени, магнит).\n- **Multi-ball**: Возможность управления несколькими мячами одновременно.","x":550,"y":-20,"width":450,"height":200,"color":"2"}, {"id":"game-3","type":"text","text":"## 📺 Визуализация\n\n- **Three.js / PixiJS**: 3D или высокопроизводительный 2D рендеринг.\n- **Particle System**: Эффекты искр и взрывов при столкновениях.","x":550,"y":210,"width":450,"height":150,"color":"2"}, {"id":"comm-title","type":"text","text":"# ⚡ Связь и Синхронизация","x":0,"y":250,"width":450,"height":80,"color":"3"}, {"id":"comm-1","type":"text","text":"## 🔗 Транспорт данных\n\n- **WebSockets (Socket.io)**: Минимальная задержка (Latency < 20ms).\n- **WebRTC (DataChannels)**: P2P связь между телефоном и экраном для еще большей скорости.\n- **Firebase Realtime DB**: Как альтернатива для быстрого прототипирования.","x":-230,"y":350,"width":350,"height":200,"color":"3"}, {"id":"comm-2","type":"text","text":"## 🛠️ Архитектура сессии\n\n- **QR-код**: Автоматическая генерация ссылки на контроллер для конкретной комнаты.\n- **State Sync**: Игровой экран — «Источник Истины» (Authoritative Server).\n- **Interpolation**: Сглаживание движения на экране при потере пакетов от телефона.","x":150,"y":350,"width":350,"height":200,"color":"3"}, {"id":"future-title","type":"text","text":"# 🚀 Масштабирование идеи","x":0,"y":600,"width":450,"height":80,"color":"6"}, {"id":"future-1","type":"text","text":"## 🌍 Глобальные возможности\n\n- **Турниры**: Глобальная таблица лидеров (Leaderboard).\n- **Кастомизация**: Скины для столов и мячей (NFT/Collectibles).\n- **AR Mode**: Проекция пинбольного стола на реальный пол через камеру телефона.","x":0,"y":700,"width":450,"height":180,"color":"6"} ], "edges":[ {"id":"e1","fromNode":"root","fromSide":"left","toNode":"controller-title","toSide":"right","color":"1"}, {"id":"e2","fromNode":"root","fromSide":"right","toNode":"game-title","toSide":"left","color":"2"}, {"id":"e3","fromNode":"root","fromSide":"bottom","toNode":"comm-title","toSide":"top","color":"3"}, {"id":"e4","fromNode":"comm-title","fromSide":"bottom","toNode":"future-title","toSide":"top","color":"6"}, {"id":"ec1","fromNode":"controller-title","fromSide":"bottom","toNode":"ctrl-1","toSide":"top","color":"1"}, {"id":"ec2","fromNode":"ctrl-1","fromSide":"bottom","toNode":"ctrl-2","toSide":"top","color":"1"}, {"id":"ec3","fromNode":"ctrl-2","fromSide":"bottom","toNode":"ctrl-3","toSide":"top","color":"1"}, {"id":"eg1","fromNode":"game-title","fromSide":"bottom","toNode":"game-1","toSide":"top","color":"2"}, {"id":"eg2","fromNode":"game-1","fromSide":"bottom","toNode":"game-2","toSide":"top","color":"2"}, {"id":"eg3","fromNode":"game-2","fromSide":"bottom","toNode":"game-3","toSide":"top","color":"2"}, {"id":"em1","fromNode":"comm-title","fromSide":"bottom","toNode":"comm-1","toSide":"top","color":"3"}, {"id":"em2","fromNode":"comm-title","fromSide":"bottom","toNode":"comm-2","toSide":"top","color":"3"}, {"id":"flow-1","fromNode":"ctrl-1","fromSide":"right","toNode":"comm-1","toSide":"left","color":"1","label":"Сенсоры -> Сокеты"}, {"id":"flow-2","fromNode":"comm-2","fromSide":"right","toNode":"game-1","toSide":"left","color":"2","label":"Сокеты -> Гравитация"} ] }