0.3.0-0-pre.3
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/000-README.md -->
|
||||
<!-- version: 22 -->
|
||||
<!-- version: 23 -->
|
||||
|
||||
# Documentation games.sasedev
|
||||
|
||||
@@ -73,6 +73,8 @@ Voir [`../RULES.md`](../RULES.md), notamment [`rules/RULES_DOCUMENTATION.md`](ru
|
||||
- [`development/005-DESKTOP_WINDOW_POLICY.md`](development/005-DESKTOP_WINDOW_POLICY.md) — taille initiale, redimensionnement et séparation future entre fenêtre physique et résolution virtuelle.
|
||||
- [`development/006-ANDROID_RUST_NATIVE_BUILD.md`](development/006-ANDROID_RUST_NATIVE_BUILD.md) — build `cdylib` Rust Android, cargo-ndk, packaging `jniLibs` et symbole `SDL_main`.
|
||||
- [`development/007-ANDROID_JNI_BRIDGE.md`](development/007-ANDROID_JNI_BRIDGE.md) — frontière Java/JNI minimale, version de contrat et séparation avec l'input SDL3.
|
||||
- [`development/008-WASM_TAURI_POC.md`](development/008-WASM_TAURI_POC.md) — baseline historique Reflex Tauri/WebAssembly et génération WASM associée.
|
||||
- [`development/009-SNAKE_WEB_WASM_BUILD.md`](development/009-SNAKE_WEB_WASM_BUILD.md) — build Cargo + `wasm-bindgen` natif de l'adapter Snake pour le navigateur direct.
|
||||
|
||||
## Historique validé
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/001-WORKSPACE_ARCHITECTURE.md -->
|
||||
<!-- version: 5 -->
|
||||
<!-- version: 6 -->
|
||||
|
||||
# Architecture du workspace
|
||||
|
||||
@@ -22,7 +22,8 @@ games.sasedev/
|
||||
│ ├── game-reflex-poc-desktop/
|
||||
│ ├── game-snake-poc-desktop/
|
||||
│ ├── game-reflex-poc-tauri/
|
||||
│ └── game-reflex-poc-wasm/
|
||||
│ ├── game-reflex-poc-wasm/
|
||||
│ └── game-snake-poc-wasm/
|
||||
├── assets/
|
||||
│ ├── common/
|
||||
│ ├── game-reflex-poc/
|
||||
@@ -69,15 +70,12 @@ Le runtime devra conserver une distinction logique entre ressources communes et
|
||||
|
||||
Chaque crate de jeu reste une bibliothèque. Une crate binaire Desktop séparée sous `crates/apps/` la consomme pour permettre les itérations locales rapides. Cette séparation évite d’introduire `main`, des choix de plateforme ou du code de lancement dans le gameplay réutilisable.
|
||||
|
||||
## Variante Tauri / WebAssembly
|
||||
## Adapters WebAssembly et variante Tauri
|
||||
|
||||
La variante Tauri est distincte du runner SDL3 natif.
|
||||
Les adapters WASM sont distincts des runners SDL3 natifs et ne déplacent aucune règle de gameplay hors des crates de jeu.
|
||||
|
||||
`game-reflex-poc-tauri` porte deux faces du même launcher :
|
||||
`game-reflex-poc-wasm` adapte le POC Reflex à `wasm-bindgen` pour le host Tauri/WebView existant. `game-snake-poc-wasm` adapte séparément Snake pour le premier host navigateur direct de `0.3.0`. Dans les deux cas, l'adapter expose l'état et la scène portable ; il ne possède pas les règles du jeu.
|
||||
|
||||
- une bibliothèque `wasm32-unknown-unknown` qui adapte `game-reflex-poc` à `wasm-bindgen` ;
|
||||
- un binaire natif Tauri qui héberge la WebView locale.
|
||||
`game-reflex-poc-tauri` reste le binaire natif Tauri qui héberge la WebView Reflex locale. Son frontend Vite/TypeScript pilote un Canvas et appelle l'adapter Reflex WASM. La crate Tauri suit le modèle des apps Desk KSP : façade `lib.rs`, pont `tauri.rs`, modules propriétaires séparés et frontend local à la crate.
|
||||
|
||||
Le frontend statique sous `Tauri/game-reflex-poc/frontend/` pilote un Canvas et appelle l'adaptateur WASM. Les règles Reflex restent exclusivement dans `game-reflex-poc`.
|
||||
|
||||
La crate Tauri suit le modèle des apps Desk KSP : façade `lib.rs`, pont `tauri.rs`, modules propriétaires séparés et frontend Vite/TypeScript local à la crate.
|
||||
Le futur host Web Snake direct consommera `game-snake-poc-wasm` depuis son propre frontend Vite/TypeScript ; ce frontend n'est pas introduit par la tranche WASM elle-même.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/004-INPUT_AND_CONTROLS.md -->
|
||||
<!-- version: 8 -->
|
||||
<!-- version: 9 -->
|
||||
|
||||
# Abstraction des entrées et contrôles
|
||||
|
||||
@@ -109,7 +109,9 @@ Le contrat d'entrée Snake retenu pour le premier POC Web est volontairement min
|
||||
- le host traduit clavier, swipe ou boutons virtuels vers les mêmes actions directionnelles ;
|
||||
- le rendu reste exposé par `EngineGame::scene` sous forme d'`EngineScene`, sans dépendance au Canvas ou à SDL3.
|
||||
|
||||
Le futur adapter WASM de `0-pre.3` doit donc adapter ce contrat existant plutôt que créer un second modèle d'entrée ou de rendu propre au Web. Les besoins de provenance, monétisation ou autres services plateforme appartiennent au host/launcher et ne justifient pas une dépendance plateforme inutilisée dans la crate de gameplay.
|
||||
L'adapter WASM de `0-pre.3` adapte ce contrat existant plutôt que créer un second modèle d'entrée ou de rendu propre au Web. Il mémorise au plus une direction logique en attente ; `tick()` la consomme pour le prochain update puis remet l'entrée en attente à zéro. Un événement clavier ou tactile ne fait donc pas avancer la simulation à lui seul.
|
||||
|
||||
Le host Web reste responsable de transformer ses événements physiques ou widgets en appels `left`, `right`, `up` ou `down`, puis de piloter la cadence des `tick()`. Les besoins de provenance, monétisation ou autres services plateforme appartiennent au host/launcher et ne justifient pas une dépendance plateforme inutilisée dans la crate de gameplay.
|
||||
|
||||
## Requête de sortie
|
||||
|
||||
|
||||
53
docs/development/009-SNAKE_WEB_WASM_BUILD.md
Normal file
53
docs/development/009-SNAKE_WEB_WASM_BUILD.md
Normal file
@@ -0,0 +1,53 @@
|
||||
<!-- file: docs/development/009-SNAKE_WEB_WASM_BUILD.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Build WASM du POC Snake Web direct
|
||||
|
||||
## Objectif
|
||||
|
||||
`game-snake-poc-wasm` fournit le bridge Rust/WASM du premier host navigateur direct. Cette tranche valide uniquement la production du module WebAssembly et de ses bindings JavaScript ; le frontend Vite/TypeScript et le shell Bootstrap 5 appartiennent à `0-pre.4`.
|
||||
|
||||
## Prérequis
|
||||
|
||||
À installer une fois si nécessaire :
|
||||
|
||||
```bash
|
||||
rustup target add wasm32-unknown-unknown
|
||||
cargo install wasm-bindgen-cli --locked
|
||||
```
|
||||
|
||||
Le CLI `wasm-bindgen` utilisé doit rester compatible avec la version de la crate `wasm-bindgen` résolue par Cargo.
|
||||
|
||||
## Build Rust
|
||||
|
||||
Depuis la racine du dépôt :
|
||||
|
||||
```bash
|
||||
cargo build -p game-snake-poc-wasm --target wasm32-unknown-unknown
|
||||
```
|
||||
|
||||
La configuration Cargo racine place l'artefact sous :
|
||||
|
||||
```text
|
||||
../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_snake_poc_wasm.wasm
|
||||
```
|
||||
|
||||
## Génération des bindings navigateur
|
||||
|
||||
Créer les bindings avec l'outil natif, sans orchestrateur Python :
|
||||
|
||||
```bash
|
||||
wasm-bindgen \
|
||||
../builds/sasedev-games/target/wasm32-unknown-unknown/debug/game_snake_poc_wasm.wasm \
|
||||
--target web \
|
||||
--out-dir ../builds/sasedev-games/game-snake-poc-web/wasm \
|
||||
--out-name game_snake_poc_wasm
|
||||
```
|
||||
|
||||
Les fichiers générés restent intégralement hors du dépôt sous `../builds/sasedev-games/`. Ils ne sont ni commités ni copiés dans `crates/` par cette tranche.
|
||||
|
||||
## Frontière avec `0-pre.4`
|
||||
|
||||
`0-pre.3` s'arrête au module WASM et à ses bindings générés. `0-pre.4` ajoutera le frontend Vite/TypeScript qui les consomme, le document HTML Bootstrap 5, le Canvas, le clavier et les contrôles tactiles.
|
||||
|
||||
Le frontend reste responsable de la cadence d'appel à `tick()` et de la traduction des événements navigateur vers `left()`, `right()`, `up()` et `down()`.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/plans/001-V0_3_0_WEB_SNAKE_POC_PLAN.md -->
|
||||
<!-- version: 3 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Plan v0.3.0 — baseline Snake et premier POC Web direct
|
||||
|
||||
@@ -59,9 +59,11 @@ Gate : audits statiques, `cargo check --workspace`, tests ciblés Snake et véri
|
||||
|
||||
### `0-pre.3` — adaptation Snake WASM
|
||||
|
||||
Introduire la crate/adaptation WASM minimale de Snake et le chemin de génération `wasm-bindgen`, sans frontend riche ni généralisation prématurée.
|
||||
Introduire `game-snake-poc-wasm`, adapter WASM minimal dédié à Snake. La crate possède `SnakeState`, le `FixedStepRunner` et une direction logique en attente consommée au prochain `tick()`. Elle expose à `wasm-bindgen` les quatre directions, le score, la longueur et la scène normalisée nécessaire au futur Canvas, sans SDL3, Tauri, DOM, frontend ni `engine-v1-platform-api`.
|
||||
|
||||
Gate : compilation ciblée WASM et tests Rust applicables. Si cette tranche dépasse le budget normal, séparer bridge et build en deux prereleases.
|
||||
Livraison candidate : la crate est membre du workspace et la distribution statique vérifie sa présence. Le bridge reste volontairement spécifique à Snake ; aucune abstraction commune avec `game-reflex-poc-wasm` n'est extraite avant observation d'une duplication réellement problématique.
|
||||
|
||||
Gate : audits statiques, `cargo check --workspace`, Clippy ciblé, tests de l'adapter, build `wasm32-unknown-unknown`, génération `wasm-bindgen --target web` dans `../builds/sasedev-games/` et graphe de dépendances. Aucun build Vite/Bootstrap ni smoke navigateur n'est requis avant `0-pre.4`.
|
||||
|
||||
### `0-pre.4` — frontend Web/Vite, shell Bootstrap 5 et contrôles
|
||||
|
||||
|
||||
Reference in New Issue
Block a user