Files
games/docs/rules/RULES_PROJECT.md
2026-09-16 00:03:45 +02:00

4.1 KiB
Raw Blame History

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/, les crates jeu sous crates/games/ et les exécutables/launchers réutilisant ces libs sous crates/apps/.
  • 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.
  • GAME-WS-007 — Un jeu est prioritairement une crate lib; lorsquun lancement Desktop est nécessaire, une crate bin séparée sous crates/apps/ dépend de cette lib et ne duplique pas son gameplay.
  • GAME-WS-008 — Les runners Desktop sont nommés <game>-desktop et restent indépendants des frontends Android.

Générations du moteur

  • GAME-ENGINE-001 — Une génération incompatible de moteur reçoit un nom explicite engine-vN-*.
  • GAME-ENGINE-002engine-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-003assets/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-003Android/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-004Android/<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.