mirror of
https://github.com/tiennm99/sokoban.git
synced 2026-06-09 22:12:37 +00:00
8a3d4b4a9d
Replace Phaser 3 with Svelte 5 as the rendering and UI layer. The framework-agnostic core (level parser, board model, progress store, microban level data) moves from src/game/core → src/lib/core with zero code changes. Scenes and the hand-rolled button factory are gone; in their place: - src/App.svelte root router (menu / levels / game) - src/views/MenuView title + play + progress + hints - src/views/LevelSelectView paginated 5x4 grid with native <button>s - src/views/GameView owns BoardModel, handles input, HUD, win - src/views/Board purely presentational DOM renderer - src/views/AppButton shared themed wrapper for native <button> - src/app.css Nord palette ported to CSS variables GameView uses a non-reactive BoardModel ref and syncs plain snapshot fields (player, boxes, moves, won) into $state after every mutation — Board consumes only plain props, so Svelte reactivity stays predictable and the core class stays framework-agnostic. GameView is keyed on levelIndex in App, so changing level remounts with fresh state. Native <button> everywhere kills the click-hitbox class of bugs. Animations are now CSS transform transitions (110ms) instead of tweens. Bundle shrinks from ~1.5 MB Phaser to ~65 kB JS / 23 kB gzipped — about 60x smaller. Removed: phaser, terser, src/game, log.js (analytics ping), phasermsg vite plugin, manual Phaser chunks, terser config, public/style.css. Scripts simplified to dev/build. Docs updated: codebase summary, architecture, code standards, changelog, roadmap, README.
37 lines
1.5 KiB
Markdown
37 lines
1.5 KiB
Markdown
# Development Roadmap
|
||
|
||
## Phase 0 — Svelte rewrite (complete, 2026-04-12)
|
||
- Replace Phaser 3 with Svelte 5 — native DOM buttons, CSS grid board, transform-based animations.
|
||
- 60× smaller bundle (~25 kB gzipped vs ~1.5 MB).
|
||
- Core modules (parser, board model, progress store, level data) moved verbatim into `src/lib/`.
|
||
- Nord theme moved into CSS custom properties.
|
||
|
||
## Phase 1 — Core game (complete)
|
||
- Phaser + Vite scaffolding.
|
||
- Menu / Level / Game scenes.
|
||
- Arrow-key movement, box pushing, target detection.
|
||
|
||
## Phase 2 — Overhaul (complete, 2026-04-11)
|
||
- Replace 3 hand-crafted levels with the full 155-puzzle Microban set.
|
||
- Modularize: core / ui / scenes split, every file <200 LOC.
|
||
- BoardModel with undo + move counter.
|
||
- Paginated level select (5 pages × 20 levels).
|
||
- Nord theme + rounded button factory + animated board renderer.
|
||
- WASD support, U/Z undo, R restart, Esc to menu.
|
||
- localStorage progress (completed + best move count).
|
||
- Drop dead Arcade physics and broken shutdown code.
|
||
- Docs folder + README refresh.
|
||
|
||
## Phase 3 — Polish (planned)
|
||
- Sound effects (step, push, win).
|
||
- Player facing direction indicator.
|
||
- Level category tabs (Easy / Medium / Hard) derived from puzzle size or move count.
|
||
- Touch controls (swipe) for mobile.
|
||
- Unit tests for `level-parser` and `board-model`.
|
||
|
||
## Phase 4 — Stretch (ideas)
|
||
- Additional level packs (Sasquatch, Sokogen).
|
||
- Custom level importer (paste XSB text).
|
||
- Replay / move playback.
|
||
- Per-level leaderboards (local only).
|