0.1.0-0-pre.1
This commit is contained in:
56
docs/architecture/001-WORKSPACE_ARCHITECTURE.md
Normal file
56
docs/architecture/001-WORKSPACE_ARCHITECTURE.md
Normal file
@@ -0,0 +1,56 @@
|
||||
<!-- file: docs/architecture/001-WORKSPACE_ARCHITECTURE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Architecture du workspace
|
||||
|
||||
## Vue générale
|
||||
|
||||
```text
|
||||
games.sasedev/
|
||||
├── crates/
|
||||
│ ├── engines/
|
||||
│ │ ├── engine-v1-common/
|
||||
│ │ ├── engine-v1-platform-api/
|
||||
│ │ └── engine-v1-sdl/
|
||||
│ └── games/
|
||||
│ ├── game-reflex-poc/
|
||||
│ └── game-snake-poc/
|
||||
├── assets/
|
||||
│ ├── common/
|
||||
│ ├── game-reflex-poc/
|
||||
│ └── game-snake-poc/
|
||||
├── Android/
|
||||
│ ├── common/
|
||||
│ ├── game-reflex-poc/
|
||||
│ └── game-snake-poc/
|
||||
├── docs/
|
||||
├── deltas/
|
||||
├── prompts/
|
||||
└── scripts/
|
||||
```
|
||||
|
||||
## Générations du moteur
|
||||
|
||||
Une génération `engine-vN` est une ligne de compatibilité. Un jeu peut rester sur `engine-v1` pendant qu'un nouveau jeu expérimente `engine-v2`. Les anciens jeux sont ensuite migrés individuellement.
|
||||
|
||||
Les subdivisions sont exprimées par crates afin de ne pas forcer un jeu à dépendre de capacités inutiles. La baseline sépare déjà :
|
||||
|
||||
- `engine-v1-common` : types et comportements génériques indépendants des plateformes ;
|
||||
- `engine-v1-platform-api` : contrats abstraits des services plateforme ;
|
||||
- `engine-v1-sdl` : frontière d'intégration SDL3, volontairement minimale dans la baseline.
|
||||
|
||||
## Jeux
|
||||
|
||||
Chaque jeu est une crate indépendante sous `crates/games/`. Un jeu ne duplique pas une crate moteur. Il sélectionne explicitement la génération qu'il consomme.
|
||||
|
||||
## Assets
|
||||
|
||||
Les assets sont extérieurs aux crates. Le packaging compose :
|
||||
|
||||
```text
|
||||
assets/common/
|
||||
+
|
||||
assets/<game>/
|
||||
```
|
||||
|
||||
Le runtime devra conserver une distinction logique entre ressources communes et ressources spécifiques afin d'éviter les collisions silencieuses.
|
||||
42
docs/architecture/002-ANDROID_ARCHITECTURE.md
Normal file
42
docs/architecture/002-ANDROID_ARCHITECTURE.md
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- file: docs/architecture/002-ANDROID_ARCHITECTURE.md -->
|
||||
<!-- version: 1 -->
|
||||
|
||||
# Architecture Android
|
||||
|
||||
## Principe
|
||||
|
||||
Android est un frontend de plateforme autour du jeu natif Rust/SDL3. Java est retenu comme langage de glue par défaut.
|
||||
|
||||
```text
|
||||
Android application
|
||||
├── Java common layer
|
||||
│ ├── SaseGameActivity
|
||||
│ ├── NativeBridge
|
||||
│ └── futurs Ads/Billing/Haptics managers
|
||||
├── Java game-specific layer
|
||||
├── SDL3 Android AAR
|
||||
├── native Rust game library
|
||||
├── common assets
|
||||
└── game-specific assets
|
||||
```
|
||||
|
||||
SDL3 documente un shim Java/JNI et recommande de dériver sa propre activité de `SDLActivity`. L'utilisation de l'AAR SDL3 doit être privilégiée lorsque l'intégration concrète démarre afin d'éviter de recopier les sources SDL dans chaque jeu.
|
||||
|
||||
## Modules Gradle
|
||||
|
||||
`Android/common` est destiné à devenir une Android Library réutilisable. Les modules `Android/game-*` deviennent des applications distinctes produisant chacune leur APK/AAB.
|
||||
|
||||
Le squelette initial ne fige volontairement pas la version d'Android Gradle Plugin ni celle de SDL3 : ces dépendances seront introduites dans le premier delta Android réellement exécutable, avec versions vérifiées au moment de l'intégration.
|
||||
|
||||
## JNI
|
||||
|
||||
Le contrat JNI doit rester petit. Les services envisagés sont notamment :
|
||||
|
||||
- affichage d'une publicité récompensée ;
|
||||
- affichage d'un interstitiel ;
|
||||
- achats intégrés ;
|
||||
- partage Android ;
|
||||
- haptique ;
|
||||
- événements lifecycle utiles au moteur.
|
||||
|
||||
Une rupture interne de `engine-v1` vers `engine-v2` ne doit pas imposer une nouvelle couche Java si ce contrat reste compatible.
|
||||
Reference in New Issue
Block a user