123 lines
3.2 KiB
Markdown
123 lines
3.2 KiB
Markdown
<!-- file: deltas/0.1.0/0-pre.10.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta 0.1.0-0-pre.10
|
|
|
|
## Base
|
|
|
|
Base validée : `0.1.0-0-pre.9.fix.1`.
|
|
|
|
## Objectif
|
|
|
|
Rendre le POC Reflex effectivement jouable avec le même gameplay Rust sur Desktop et Android.
|
|
|
|
## Scène portable
|
|
|
|
`engine-v1-common` introduit :
|
|
|
|
```text
|
|
RenderColor
|
|
NormalizedRect
|
|
RenderRect
|
|
EngineScene
|
|
```
|
|
|
|
`EngineGame::scene()` fournit un snapshot portable après chaque update.
|
|
|
|
Le backend SDL3 convertit les coordonnées normalisées vers la taille de sortie courante, donc le redimensionnement Desktop reste indépendant des coordonnées gameplay.
|
|
|
|
## Gameplay Reflex
|
|
|
|
La cible est visible sous forme de rectangle jaune.
|
|
|
|
Le score augmente uniquement lorsqu'une impulsion `Primary` porte un pointeur situé à l'intérieur de la cible.
|
|
|
|
Après chaque succès, la cible se déplace selon une séquence déterministe de huit positions.
|
|
|
|
## Input
|
|
|
|
Desktop :
|
|
|
|
- clic gauche = impulsion `Primary` ;
|
|
- déplacement souris avec bouton maintenu = mise à jour du pointeur ;
|
|
- relâchement = pointeur inactif.
|
|
|
|
Android :
|
|
|
|
- `FingerDown` = impulsion `Primary` ;
|
|
- `FingerMotion` = mise à jour sans répétition du déclenchement ;
|
|
- `FingerUp`/`FingerCanceled` = pointeur inactif.
|
|
|
|
Un contact maintenu ne peut donc plus compter comme un succès à chaque frame.
|
|
|
|
## Validation Rust
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo fmt --all -- --check
|
|
|
|
python3 scripts/audit_rust_workspace_rules.py
|
|
python3 scripts/audit_markdown_tables.py README.md RULES.md ROADMAP.md CHANGELOG.md docs prompts crates Android deltas history
|
|
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
|
|
|
cargo test -p engine-v1-common --all-targets --all-features
|
|
cargo test -p engine-v1-sdl --all-targets --all-features
|
|
cargo test -p game-reflex-poc --all-targets --all-features
|
|
```
|
|
|
|
## Smoke Desktop
|
|
|
|
```bash
|
|
cargo run -p game-reflex-poc-desktop
|
|
```
|
|
|
|
Critères :
|
|
|
|
- cible jaune visible ;
|
|
- clic hors cible : aucun déplacement ;
|
|
- clic dans la cible : déplacement immédiat vers la position suivante ;
|
|
- plusieurs succès consécutifs possibles ;
|
|
- resize de fenêtre : la cible conserve ses coordonnées relatives ;
|
|
- `Escape` et fermeture système restent propres.
|
|
|
|
## Build Android
|
|
|
|
Le code natif a changé : reconstruire impérativement le `cdylib` Reflex.
|
|
|
|
```bash
|
|
python3 scripts/build_android_rust.py reflex
|
|
```
|
|
|
|
Puis :
|
|
|
|
```bash
|
|
cd Android
|
|
gradle :game-reflex-poc:assembleDebug
|
|
cd ..
|
|
```
|
|
|
|
Si un appareil ou émulateur est disponible :
|
|
|
|
```bash
|
|
adb install -r Android/game-reflex-poc/build/outputs/apk/debug/game-reflex-poc-debug.apk
|
|
adb shell am start -n com.sasedev.games.reflex/.ReflexActivity
|
|
```
|
|
|
|
Critères appareil :
|
|
|
|
- surface SDL visible ;
|
|
- cible jaune visible ;
|
|
- tap hors cible sans succès ;
|
|
- tap dans la cible déplace la cible ;
|
|
- pas de crash JNI ou natif.
|
|
|
|
Si aucun device n'est disponible, le build natif + APK et le smoke Desktop suffisent pour valider techniquement le delta, avec smoke Android explicitement reporté.
|
|
|
|
## Transition
|
|
|
|
Si les gates sont propres, passer automatiquement à `0.1.0-0-pre.11` pour rendre Snake jouable et vérifier la réutilisation du modèle de scène.
|
|
|
|
En cas d'échec imputable au projet, produire `0.1.0-0-pre.10.fix.1`.
|