Initial commit

**Motivations:**
- Initialisation du versionning git pour le projet

**Root causes:**
- N/A (Nouveau projet)

**Correctifs:**
- N/A

**Evolutions:**
- Structure initiale du projet
- Ajout du .gitignore

**Pages affectées:**
- Tous les fichiers
This commit is contained in:
2026-03-03 22:24:17 +01:00
commit e031c9a1d2
155 changed files with 22334 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
# Mode automatique 50 profils et sélection hiérarchique
**Objectif :** Proposer 50 profils de mode automatique répartis en 5 familles, avec une interface de sélection en deux étapes (Famille → Spécialisation) et utilisation des paramètres du profil choisi pour les décisions dupgrade du joueur.
**Référence :** Cahier des charges §5 ; plan daction BLOC 3.
## Impacts
- **State :** `autoModeProfileId` (150) stocke le profil choisi ; `autoModeProfile` ("fast"|"slow"|"balanced") reste pour rétrocompatibilité et est mappé à un profil par défaut (balanced→25, fast→33, slow→7).
- **Mode auto joueur :** Les décisions dupgrade (parcelle, compétences, camion) utilisent les paramètres du profil (seuil de dépense, probabilité dupgrade) au lieu des 3 profils legacy uniquement.
- **UI :** Clic sur le bouton mode auto quand il est inactif ouvre un panneau (Famille → Spécialisation) ; choix dune spécialisation active le mode auto avec ce profil. Clic quand le mode auto est actif le désactive.
- **Bots :** Les décisions upgrade/sell/buy utilisent `getProfileParams(LEGACY_PROFILE_TO_ID[profile])` ; paramètres centralisés dans auto-mode-profiles (plus de ternaires fast/slow/balanced).
## Modifications
- **web/js/auto-mode-profiles.js** (nouveau) : 50 profils avec id, familyId (15), spendThreshold, upgradeChance, sellChance, clés i18n (label, priorities, risks). Familles : Conservateurs (110), Éleveurs (1120), Commerçants (2130), Expansionnistes (3140), Scientifiques (4150). `getEffectiveProfileId(state)`, `getProfileParams(profileId)`, `getProfilesByFamily(familyId)`, `getAllProfiles()`.
- **web/js/types.js** : `GameState.autoModeProfileId?`, `autoProfilePickerOpen?`, `autoProfilePickerFamily?`.
- **web/js/state.js** : `saveState` omet les champs `autoProfilePickerOpen` et `autoProfilePickerFamily` avant persistance ; `applyLoadStateScalarDefaults` remet ces champs à false/undefined au chargement.
- **web/js/bot-zoo.js** : `tickPlayerAutoMode` utilise `getEffectiveProfileId(state)` et `getProfileParams(profileId)` ; `playerAutoDoOneUpgrade(state, params, rng)` reçoit des paramètres numériques. Pour les bots, `tickBotDecisions` utilise `LEGACY_PROFILE_TO_ID[b.profile]` et `getProfileParams(profileId)` ; `botDecideUpgrade`, `botDecideSell`, `botDecideBuy` reçoivent un objet `params` (spendThreshold, upgradeChance, sellChance) au lieu du libellé.
- **web/js/ui.js** : Clic sur le bouton mode auto ouvre le picker si inactif ; panneau avec 5 familles puis 10 spécialisations, bouton Annuler. Au choix dune spécialisation : `autoModeProfileId`, `autoMode: true`, fermeture du picker.
- **web/js/texts-fr.js** : `autoProfileFamilyLabel` (5 familles), `autoProfileSpecialisationLabel` (150), `autoProfilePrioritiesLabel`, `autoProfileRisksLabel` (placeholders), libellés du picker.
- **web/css/main.css** : `.auto-profile-picker-wrap`, `.auto-profile-picker-title`, `.auto-profile-picker-step`, `.auto-profile-picker-families`, `.auto-profile-picker-specialisations`, boutons famille/spécialisation, bouton Annuler.
## Modalités de déploiement
- Client uniquement. Rechargement suffit.
## Modalités danalyse
- Désactiver le mode auto, cliquer sur le bouton mode auto : le panneau « Choisir le profil » saffiche avec 5 familles.
- Choisir une famille : affichage des 10 spécialisations.
- Choisir une spécialisation : le mode auto sactive avec le profil correspondant (🤖), le panneau se ferme.
- Annuler : le panneau se ferme sans activer le mode auto.
- Avec le mode auto actif, les upgrades automatiques utilisent les paramètres du profil sélectionné (seuil de dépense et probabilité dupgrade).
- Ancienne sauvegarde sans `autoModeProfileId` : comportement identique à « balanced » (profil 25).