diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8eb845a --- /dev/null +++ b/.env.example @@ -0,0 +1,22 @@ +# Скопировать в .env и настроить под себя. .env в git не попадает. + +# --- разработка без живого чата --- +# фейковые зрители, генерируют !рубить/!стоп +FAKE_VIEWERS=5 +# dev-эндпоинты: POST /dev/command {"name":"Ник","text":"!рубить"}, GET /dev/state +DEV_HTTP=1 + +# --- Twitch (см. docs/twitch-setup.md) --- +# TWITCH_CLIENT_ID= +# TWITCH_CLIENT_SECRET= +# TWITCH_CHANNEL= +# TWITCH_BOT_TOKEN= +# TWITCH_BOT_REFRESH= + +# объявлять левелапы в чат (троттлинг 60 сек) +# CHAT_ANNOUNCE_LEVELUP=1 + +# --- прочее --- +# PORT=3000 +# TICK_MS=1000 +# SQLITE_PATH=data/idle-xboct.db diff --git a/README.md b/README.md index b752d93..89191c6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Idle-игра для Twitch-чата: аватары зрителей живут на экране стрима, команды чата управляют ими. План и все решения — в [docs/PLAN.md](docs/PLAN.md). -## Запуск (M0 — каркас) +## Запуск (M1 — вертикальный срез) ```bash pnpm install @@ -12,9 +12,23 @@ pnpm dev - сервер: http://localhost:3000 — WS на `/ws`, здоровье на `/healthz` - overlay (browser source для OBS): http://localhost:5173 -- web-мир: http://localhost:5174 +- web-мир: http://localhost:5174 — топ зрителей и лента событий Сборка клиентов (`pnpm build`) — сервер начнёт раздавать их сам: `/overlay/` и `/web/` на порту 3000 (это режим для OBS, без vite dev-сервера). -Twitch-подключение — с M1, чек-лист получения токенов: [docs/twitch-setup.md](docs/twitch-setup.md). +### Разработка без живого стрима + +Скопируй `.env.example` в `.env` и включи `FAKE_VIEWERS=5` — фейковые зрители начнут +писать `!рубить`/`!стоп`. С `DEV_HTTP=1` можно дёргать вручную: + +```bash +curl -X POST http://localhost:3000/dev/command -H "content-type: application/json" \ + -d '{"name":"Тестер","text":"!рубить"}' +``` + +Живой чат: заполни `TWITCH_*` по чек-листу [docs/twitch-setup.md](docs/twitch-setup.md) — +бот подхватит их при старте автоматически. + +Дымовой тест: сервер с `DEV_HTTP=1 SQLITE_PATH=:memory:`, затем `pnpm --filter @idle/server smoke`. + diff --git a/docs/PLAN.md b/docs/PLAN.md index 4aa87ba..59976f0 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -15,12 +15,17 @@ | Клиенты | Svelte 5 + PixiJS 8 (8.x) + bitecs 0.4 | | Сервер | Node.js, `node:http` + `ws` + `sirv` (без фреймворка), симуляция на bitecs | | Twitch | `@twurple/easy-bot` (чтение команд + ответы в чат), `@twurple/eventsub-ws` (Channel Points) | -| БД | SQLite (`better-sqlite3`) через тонкий слой репозиториев | +| БД | SQLite через тонкий слой persist. M1: встроенный `node:sqlite` (Node ≥24, без нативных сборок и install-скриптов); замена на `better-sqlite3`/др. — при необходимости, не трогая остальной код | Решения по ECS: **bitecs, новый API 0.4** (в 0.4 API переписан; старый доступен как `bitecs/legacy`). Запасной вариант — koota (pmndrs), если новый API окажется слишком зубодробительным. miniplex отклонён (объектный оверхед + не развивается с 2023). +**Уточнение по факту M1:** вертикальный срез сделан на plain TS за узким интерфейсом +`SimWorld` (сущностей — десятки, выгод от ECS ноль, а 0.4 требует чтения исходников). +Решение по ECS — в M2 по факту роста: bitecs 0.4, koota или остаться на plain TS, +если масштабы не потребуют. + ## Архитектура ```txt @@ -195,6 +200,9 @@ Twitch не используем. На старте все зрители с о 3. **Решено: идём полностью на бесплатном.** База — Kenney (CC0); OpenGameArt — с проверкой лицензии каждого ассета. Платные паки (LimeZu ≈ $5) — опция на потом, если захочется единого стиля +4. **M1 — процедурные спрайты в коде** (человечек, топор, деревья рисуются Pixi-графикой): + ноль лицензионных рисков и мгновенные правки; паки подключаем с M2, заменив + `AvatarView`/`TreeView` в `render` ## Идеи на потом diff --git a/packages/overlay/src/App.svelte b/packages/overlay/src/App.svelte index 59d1c93..164002c 100644 --- a/packages/overlay/src/App.svelte +++ b/packages/overlay/src/App.svelte @@ -1,7 +1,7 @@