0.1.0-0-pre.8
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/000-README.md -->
|
||||
<!-- version: 9 -->
|
||||
<!-- version: 10 -->
|
||||
|
||||
# Documentation games.sasedev
|
||||
|
||||
@@ -51,6 +51,7 @@ Voir [`../RULES.md`](../RULES.md), notamment [`rules/RULES_COMMANDS.md`](rules/R
|
||||
- [`development/004-SDL3_DESKTOP_PREREQUISITES.md`](development/004-SDL3_DESKTOP_PREREQUISITES.md) — prérequis SDL3 Desktop, stratégie de liaison système et vérification `pkg-config`.
|
||||
- [`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.
|
||||
|
||||
## Historique validé
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/architecture/004-INPUT_AND_CONTROLS.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Abstraction des entrées et contrôles
|
||||
|
||||
@@ -53,3 +53,17 @@ Cette structure n'est pas imposée comme API définitive à la baseline ; elle i
|
||||
## Orientation d'écran
|
||||
|
||||
Portrait convient particulièrement aux jeux one-button, merge, puzzle, idle, stacking et climber. Paysage convient mieux aux shooters, runners latéraux, survivor-like, tower defense et jeux utilisant deux zones de contrôle.
|
||||
|
||||
## Pointeur primaire normalisé
|
||||
|
||||
Le moteur V1 expose un `PointerState` indépendant de la plateforme :
|
||||
|
||||
- `active` indique qu'un pointeur primaire est maintenu ;
|
||||
- `x` et `y` sont normalisés dans `[0.0, 1.0]` ;
|
||||
- la plateforme borne les coordonnées avant de les transmettre au gameplay.
|
||||
|
||||
SDL3 fournit cette abstraction sur Android avec les événements `FingerDown`, `FingerMotion`, `FingerUp` et `FingerCanceled`.
|
||||
|
||||
La baseline `0.1.0-0-pre.8` mappe également un doigt actif vers `GameAction::Primary`. Cette association est volontairement minimale et pourra être remplacée par des zones tactiles ou boutons virtuels par jeu.
|
||||
|
||||
Le gameplay ne dépend d'aucun type Android, Java ou SDL3.
|
||||
|
||||
47
docs/development/007-ANDROID_JNI_BRIDGE.md
Normal file
47
docs/development/007-ANDROID_JNI_BRIDGE.md
Normal file
@@ -0,0 +1,47 @@
|
||||
<!-- file: docs/development/007-ANDROID_JNI_BRIDGE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Bridge Java/JNI Android
|
||||
|
||||
## Objectif
|
||||
|
||||
Le bridge Java/JNI sert uniquement aux services réellement Android qui ne sont pas déjà fournis de manière portable par SDL3.
|
||||
|
||||
L'input tactile de base ne passe pas par JNI : SDL3 fournit directement les événements de doigt et le moteur les convertit en `PointerState`.
|
||||
|
||||
## Contrat V1
|
||||
|
||||
La baseline expose un unique appel Java vers Rust :
|
||||
|
||||
```text
|
||||
NativeBridge.nativeContractVersion() -> 1
|
||||
```
|
||||
|
||||
`SaseGameActivity` vérifie ce contrat après `SDLActivity.onCreate()`.
|
||||
|
||||
Cette vérification détecte au démarrage :
|
||||
|
||||
- bibliothèque Rust non chargée ;
|
||||
- symbole JNI absent ;
|
||||
- divergence de version de bridge.
|
||||
|
||||
## Extension future
|
||||
|
||||
Les futurs services pourront ajouter des opérations dédiées pour :
|
||||
|
||||
- haptique Android ;
|
||||
- partage natif ;
|
||||
- facturation ;
|
||||
- publicité ;
|
||||
- notifications ;
|
||||
- autres services dépendants du framework Android.
|
||||
|
||||
Ils ne doivent pas servir à réimplémenter les entrées, fenêtres ou événements déjà couverts par SDL3.
|
||||
|
||||
## Sécurité Rust
|
||||
|
||||
L'export JNI utilise un symbole nommé explicitement et reçoit deux pointeurs opaques JNI qui ne sont pas déréférencés.
|
||||
|
||||
Aucun bloc `unsafe` ni fonction `unsafe` n'est autorisé.
|
||||
|
||||
Si un futur service nécessite de manipuler réellement `JNIEnv`, il devra faire l'objet d'une tranche distincte avec une politique FFI réévaluée plutôt que d'élargir implicitement l'exception actuelle.
|
||||
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/rules/RULES_RUST.md -->
|
||||
<!-- version: 4 -->
|
||||
<!-- version: 5 -->
|
||||
|
||||
# Règles Rust générales
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
- **RUST-BASE-001** — L'édition Rust est Rust 2024.
|
||||
- **RUST-BASE-002** — Chaque `lib.rs` et `main.rs` active `missing_docs`, `unreachable_pub` et interdit `unsafe_code`, sauf exception FFI explicitement définie par cette règle.
|
||||
- **RUST-BASE-003** — Les lints communs sont déclarés au workspace et hérités par les crates ; une crate FFI exceptée peut déclarer localement le même profil avec uniquement le niveau `unsafe_code` ajusté.
|
||||
- **RUST-BASE-004** — Les blocs `unsafe` et fonctions `unsafe` sont interdits. L’unique exception actuelle est `crates/apps/game-android-entrypoint/src/lib.rs`, autorisé à porter exactement un attribut `#[unsafe(export_name = "SDL_main")]` afin d’exposer le symbole exigé par SDL Android. Cette exception n’autorise aucun déréférencement de pointeur brut ni autre attribut unsafe.
|
||||
- **RUST-BASE-004** — Les blocs `unsafe` et fonctions `unsafe` sont interdits. L’unique exception actuelle est `crates/apps/game-android-entrypoint/src/lib.rs`, autorisé à porter uniquement les attributs `#[unsafe(export_name = "SDL_main")]` et `#[unsafe(export_name = "Java_com_sasedev_games_common_NativeBridge_nativeContractVersion")]` nécessaires aux frontières SDL Android et JNI. Cette exception n’autorise aucun déréférencement de pointeur brut, aucun autre attribut unsafe, aucun bloc `unsafe` et aucune fonction `unsafe`.
|
||||
- **RUST-BASE-005** — Tout fichier Rust possède les en-têtes `// file: ...` et `// version: N`.
|
||||
- **RUST-DEP-001** — Une dépendance tierce partagée déclare uniquement sa contrainte de version canonique sous `[workspace.dependencies]`, sauf exception normative explicitement documentée.
|
||||
- **RUST-DEP-002** — Les features d'une dépendance tierce sont activées dans le `Cargo.toml` de la crate qui en a réellement besoin, via `workspace = true`; elles ne sont pas activées globalement au workspace par commodité.
|
||||
|
||||
Reference in New Issue
Block a user