| 2026-09-07 |

refactor(engine): глубокий рефакторинг К2 — расшивка аудио, FadeState, контракт fx, Engine.destroy
...
Расшивка переростков:
- AudioManager (479→279) → AudioManager (фасад) + Voices (полифония sfx,
pan в полёте в шине голоса) + Loops (слоты музыки/амбиента, кроссфейд)
+ decode.ts (BufferCache с in-flight дедупом) + types.ts;
load() → register()
- IsometricTileMap: проходимость делегирует новому StaticGrid
(map/collision.ts) — единый источник blocked/пропы/тени; headless-потребители
берут через gridOf(data), setTile виден сразу
- core/fade.ts (FadeState): вместо ручных fadeLeft/fadeTotal в Lighting
(ambient+виньетка) и SceneManager; повторный to() в середине фейда
стартует от текущего значения — без прыжка
Контракт fx-эффектов: cancel() = остановить + вернуть базовое + погасить
свою вьюху (FxFade без keep теперь гасит, FxTrail получил cancel,
SpriteFlash.cancel через TintFlash.finish); конец жизни — destroyed
везде. FxLayer: один реестр тикающихся (items), flashes — только индекс
перезапуска.
Прочее:
- Engine.destroy() — полная зачистка (exit сцены, fx/tweens/events,
ввод, FPS-метр, app.destroy) для HMR; stop() — только цикл
- FpsMeter считает всегда, отдаёт геттером fps; DebugOverlay принимает
FpsMeter и перерисовывает Text не чаще 0,5 с
- Lighting: кэши текстур на инстансе (модульный переживал destroy
рендерера), чинен двойной destroy darkFree/darkLayer
- InputManager: DOM-обработчики и инъекции идут через общие примитивы
press/release (клавиши, указатель)
- SpriteAnimator: xorshift → math/rng.createRng (единый ГПСЧ)
- Мёртвый код: FrameAnimation (файл+экспорт+тест), vec2(), pxToUnits,
screenToIsoExact, pushOutOfWalls
Тесты: +fade, +SceneManager (стек/фазы/глотание), +EventBus, +Engine
(stepTicks, мок pixi.js), +SpriteAnimator, +computeScale. Доки движка
обновлены в том же коммите (core.md: FadeState/Engine.destroy;
render.md: контракт fx, кэш Lighting; anim.md/maps.md/README.md — без
FrameAnimation; practices.md: тест ядра без WebGL, поле-метод).
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
5 hours ago
|
| 2026-09-06 |
Батч 6: варианты текстур тайлов (микс по хэшу координат)
...
- engine: hashTile(x,y,seed) — чистый хэш координат (math/rng.ts)
- engine: TileMapData.variants + setTileVariants + публичный variantOf;
анимация сильнее вариантов (setTileAnimation снимает их)
- engine: MapFileV1.variants (строковые ключи) + validateVariants в parseMap
- game: GRASS_V1/V2, ASH_V1, PATH_V1 (id 11-14), GROUND_VARIANTS в трёх
генераторах карт, новые текстуры в ASSET_KEYS и tileTextures()
- art: grass_2/grass_3/path_2/ash_2 (32×16, та же палитра, другой seed)
- тесты: hashTile (детерминизм/разброс), выбор варианта стабилен при setTile,
анимация vs варианты, round-trip + валидация variants
- доки: maps.md (раздел «Варианты текстур»), art-style.md, art-pipeline.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
| 2026-09-05 |
движок: мост мировых юнитов (worldToScreen, unitsToPx, метрика проекции)
...
- math/iso.ts: проекция мир↔экран (float, без округления), линейка
скаляров (tileW px на юнит), метрика проекции (worldLen/worldNorm/
worldDist/moveTowardsW), тайлы (tileToWorld/worldToTile), bbox
прямоугольника (worldRectToScreen)
- shapes.ts: inCircleW/inConeW — метризованные варианты
- тесты: world.test.ts (18) + эквивалентность W-вариантов
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
engine: примитивы боя — Shake+Camera, shapes, Cooldown, TintFlash, particleSim, burst/oneShot, justReleased, transitionAny
...
- render/shake.ts + Camera.addShake/clearShake/update (Engine.tick тикает камеру)
- math/shapes.ts: inCircle, inCone, angleBetween, nearest
- core/Cooldown.ts: кулдаун на фиксированном шаге
- anim/flash.ts (TintFlash, lerpColor) + render/spriteFx.ts (SpriteFlash)
- render/particleSim.ts: чистая интеграция частиц; Particles.burst/oneShot + radialSpeed
- InputManager: isActionJustReleased, wasKeyReleased, pointer.downTicks
- StateMachine.transitionAny — переход из любого состояния
- Тесты: shapes, Cooldown, shake, flash, particleSim, InputManager (фейковый canvas), transitionAny (130 всего)
- docs/engine: core.md, render.md, input.md обновлены
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
engine: Tween+easing, fade-переходы, ресайз, IsoDepthLayer, GameState, RNG, StateMachine, DialogueRunner, Settings, атласы, PixelText+VT323, UI-кит, частицы, геймпад, тач-джойстик, аудио-шины, формат карт+Tiled
...
Co-Authored-By: Claude Code <noreply@anthropic.com>
root
committed
2 days ago
|
Скелет проекта: свой движок + изометрическая RPG
...
- packages/engine: жанронезависимый движок (цикл, сцены, ECS, ввод, камера,
изометрия 2:1, A*, сейвы, диалоги, анимация) на PixiJS-бэкенде
- apps/game: первый вертикальный срез — меню, локация «Выжженные луга»,
герой с click-to-move, 2 NPC с диалогами, автосейв по Esc
- CLAUDE.md, README.md, workspaces + Vite + Vitest
Co-Authored-By: Claude Code <noreply@anthropic.com>
gbook
committed
2 days ago
|