Files
games/docs/rules/RULES_PROJECT.md
2026-09-15 23:26:37 +02:00

52 lines
3.7 KiB
Markdown

<!-- file: docs/rules/RULES_PROJECT.md -->
<!-- version: 1 -->
# Règles spécifiques games.sasedev
## Workspace et crates
- **GAME-WS-001** — Un seul workspace Cargo racine contient les crates Rust du dépôt.
- **GAME-WS-002** — Toutes les crates Rust résident sous `crates/`.
- **GAME-WS-003** — Les crates moteur résident sous `crates/engines/` et les crates jeu sous `crates/games/`.
- **GAME-WS-004** — Une crate hérite par défaut de `workspace.package.version`.
- **GAME-WS-005** — Une crate arrivée à maturité peut porter sa propre version SemVer lorsqu'une décision documentée rend son cycle autonome nécessaire.
- **GAME-WS-006** — Les dépendances tierces communes sont centralisées sous `[workspace.dependencies]` et consommées avec `workspace = true` lorsqu'elles sont partagées.
## Générations du moteur
- **GAME-ENGINE-001** — Une génération incompatible de moteur reçoit un nom explicite `engine-vN-*`.
- **GAME-ENGINE-002** — `engine-v2` n'est pas créé pour une évolution mineure ; il représente une rupture d'API ou d'architecture suffisamment forte pour justifier une coexistence avec `engine-v1`.
- **GAME-ENGINE-003** — Plusieurs générations de moteur peuvent coexister afin de migrer les jeux progressivement.
- **GAME-ENGINE-004** — Un jeu déclare explicitement la génération de moteur qu'il consomme.
- **GAME-ENGINE-005** — Une génération de moteur n'est supprimée qu'après migration, retrait ou archivage de tous ses consommateurs actifs.
## Assets
- **GAME-ASSET-001** — Aucun asset de jeu n'est stocké dans une crate Rust.
- **GAME-ASSET-002** — Les assets sont stockés sous `assets/`.
- **GAME-ASSET-003** — `assets/common/` contient uniquement les ressources réellement mutualisées.
- **GAME-ASSET-004** — Chaque jeu peut posséder `assets/<game>/` pour ses ressources spécifiques.
- **GAME-ASSET-005** — Le packaging de chaque plateforme assemble les assets communs et spécifiques sans créer de copie source durable dans une crate.
- **GAME-ASSET-006** — Les chemins logiques d'assets doivent éviter les collisions entre espace commun et espace jeu.
## Android
- **GAME-ANDROID-001** — L'intégration Android réside sous `Android/` et reste extérieure au workspace Rust.
- **GAME-ANDROID-002** — Java est la langue Android commune par défaut ; Kotlin n'est pas requis.
- **GAME-ANDROID-003** — `Android/common/` contient la couche réutilisable : activité SDL dérivée, bridge natif, publicité, billing, haptique et services génériques selon les besoins.
- **GAME-ANDROID-004** — `Android/<game>/` contient uniquement la configuration et les extensions spécifiques au jeu : package, manifeste, ressources Android, identifiants et Java spécifique.
- **GAME-ANDROID-005** — Le code Java commun ne dépend pas d'une génération particulière du moteur Rust lorsque le contrat plateforme peut rester stable.
- **GAME-ANDROID-006** — Le contrat JNI est volontairement petit, stable et orienté services plateforme.
- **GAME-ANDROID-007** — SDL3 peut être consommé via son AAR officiel afin d'éviter de dupliquer ses sources Java/C dans chaque application.
## Plateformes
- **GAME-PLATFORM-001** — Le gameplay ne dépend pas directement d'Android, Desktop ou Web.
- **GAME-PLATFORM-002** — Les entrées physiques sont traduites en actions de jeu abstraites.
- **GAME-PLATFORM-003** — Les services Ads, Billing, Share, Haptics, Leaderboard et stockage en ligne sont consommés derrière des contrats plateforme.
## POC
- **GAME-POC-001** — Les premiers POC servent à valider l'architecture et doivent rester volontairement petits.
- **GAME-POC-002** — Un POC ne justifie pas l'introduction prématurée d'un ECS, moteur physique ou backend complet s'il n'en a pas besoin.