| 2026-09-07 |

feat(engine): слой освещения — ambient multiply + аддитивные источники
...
- render/lightSim.ts — чистая математика (образец particleSim): LightDef/
LightFrame, детерминированное мерцание flickerFactor (сумма синусов,
диапазон [1-amount, 1]), lightFrame, lerpAmbient, dimColor
- render/Lighting.ts — Pixi-адаптер: fullscreen ambient (Texture.WHITE,
blendMode multiply — цвет и есть яркость, фундамент day/night) + пул
аддитивных спрайтов света со ступенчатой пиксельной текстурой свечения
(makeGlowTexture, generateTexture resolution 1 + nearest)
- runtime API: setAmbient(color, fadeSec) с плавным лерпом, upsertLight/
removeLight/hasLight/setLightPos/setLightColor/setLightEnabled, frames()
для снапшота агента
- Renderer: третий корень lightRoot между worldRoot и uiRoot — экранное
пространство: ambient затемняет сцену, источники рисуются поверх, HUD/
fog/fade остаются читаемыми сверху
- Camera.toScreen(wx, wy) — проекция мировой точки с учётом камеры и
тряски для слоёв вне worldRoot (без лага на кадр); apply делегирует
математику в общие хелперы
- тесты: lightSim (мерцание/кадры/лерп/dim), Lighting (ambient fade,
пул, upsert/remove, мерцание, destroy), camera toScreen согласована
с apply в т.ч. при тряске
- доки: render.md (lightRoot, toScreen, раздел «Освещение», порядок
отрисовки), recipes.md (источник света)
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
10 hours ago
|
| 2026-09-06 |

feat(engine): батч 2 — оживители статики + партиклы v2 + тайл-анимации
...
- anim/motion.ts: чистая sampleMotion — bob/sway/pulse/blink, композиция,
округление bob до целого px; anim/SpriteMotion.ts — Pixi-адаптер
(база снимается в конструкторе, живые params, detach, seed→фаза)
- render/particleSim.ts (breaking): stepParticle → ParticleVisual
(alpha/scale/rotation/tint); drag, wobble, fadeIn/fadeOut-хвост,
scaleOverLife, colorOverLife; mergeEmitterOptions — чистое слияние
(burst больше не мутирует опции); fix: rng.int инклюзивен — выход
за границы colors
- render/Particles.ts: текстурные частицы, colors/colorOverLife, spin,
size-диапазон, max-лимит + пул спрайтов, blend 'add', setOptions,
onFinish у oneShot
- IsoDepthLayer.addFx(view, tx, ty, bias=0.5) — эффекты поверх актёра
- IsometricTileMap.setTileAnimation(id, frames, fps) + update(dt) —
один общий таймлайн на все клетки id (вода)
- engine.fx (батч 1) — рецепт авто-тика в доке вместо ручного update
- доки: render.md (частицы, addFx), anim.md (SpriteMotion, тайлы),
recipes.md (ходьба/атмосфера/статика/вода/удар), maps.md
- тесты: motion (9), particleSim переписан под v2 (итого 360)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
| 2026-09-05 |
Фаза 5: документация и смоуки мировых юнитов
...
- docs/engine/render.md: преамбула «мир в юнитах, экран в px», Camera
в юнитах, deadZonePx, правило display-слоя для частиц;
- docs/engine/maps.md: секция мировых юнитов (worldToScreen/screenToWorld/
unitsToPx), TallSpec.height в юнитах, worldBounds вместо screenSize;
- docs/engine/recipes.md: скелет локации и click-to-move в юнитах;
- docs/engine/README.md: принцип №3 «мир в юнитах, UI в пикселях»;
- docs/demo.md: боевая модель в юнитах;
- CLAUDE.md: правило №4 (две линейки), грабли (ромб/указатель/facing);
- смоуки и пробы пройдены (smoke, smoke-ponds, smoke-quest, walk-probe,
cam-probe, far-test) — рендер, переходы, квест и камера в норме.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Миграция игры на новые API движка + документация docs/engine
...
Игра:
- диалоги переписаны на графы DialogueRunner + GameState (тексты сохранены)
- меню на MenuList, шрифт VT323 через PixelText во всех сценах
- герой из атласа hero_sheet (gen.mjs), акторы в IsoDepthLayer
- пепел через ParticleEmitter, fade-переходы сцен, сейв с GameState
- Vite: publicDir: 'assets', алиас regex, шрифт через ?url-импорт
Документация: docs/engine/ — 10 файлов (архитектура, подсистемы, рецепты).
CLAUDE.md и README.md обновлены под новые модули и грабли.
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|