# Plan : Level Design - Batiments de Transformation ## Concept Les batiments de **transformation** consomment une ressource en entree et produisent une ressource differente en sortie. Le joueur doit construire des chaines logistiques multi-etapes : extraction → transformation → livraison. Exemple : Scierie (produit bois) → Forge (consomme bois, produit outils) → Caserne (demande outils). ## Modele Engine ### Nouveau type de cellule : Transformer ``` CellType.Transformer ``` Un `TransformerDef` combine une demande (input) et une production (output) : ```csharp public record TransformerDef( Coords Position, string Name, CargoType InputCargo, // ce qu'il consomme int InputRequired, // nb d'unites avant conversion CargoType OutputCargo, // ce qu'il produit int OutputAmount // nb d'unites produites par cycle ); ``` ### Logique de production Chaque tour, le `TransferResolver` livre du cargo au transformateur comme a une demande normale. Quand le buffer d'entree atteint `InputRequired`, le transformateur : 1. Vide son buffer d'entree 2. Remplit son buffer de sortie avec `OutputAmount` unites de `OutputCargo` 3. Le buffer de sortie est distribue aux pieces adjacentes (comme une production classique) Cela cree un rythme : accumulation → conversion → distribution. ### Changements au TerrainPatch Ajouter le type `"transformer"` dans le JSON : ```json { "col": 3, "row": 2, "type": "transformer", "transformer": { "name": "Forge", "inputCargo": "wood", "inputRequired": 2, "outputCargo": "tools", "outputAmount": 1 } } ``` ### Nouveaux types de cargo Ajouter au `CargoType` enum : - `Tools` (outils) — bois transforme - `Arms` (armes) — pierre transformee - `Gold` (or) — ressource rare de fin de campagne ## Evolution de la campagne (10 missions) ### Mission 1 : Premier Convoi (4x4) - **Deverrouille** : Pion - **Batiments** : Scierie → Depot Royal - **Objectif** : livrer 3 bois — apprendre le placement de base ### Mission 2 : Forger les Tours (6x6) - **Deverrouille** : Tour - **Batiments** : +Carriere, +Caserne (bois), +Forge (pierre) - **Objectif** : livrer bois a la caserne ET pierre a la forge - **Defi** : gerer deux routes independantes ### Mission 3 : Le Col (6x6) - **Deverrouille** : Cavalier - **Batiments** : mur bloquant + Depot (bois) - **Objectif** : traverser les murs avec des cavaliers - **Les demands precedentes restent actives** ### Mission 4 : Le Carrefour (8x8) - **Deverrouille** : Fou - **Batiments** : +Chateau (bois), +Forge Royale (pierre), murs - **Objectif** : routes diagonales avec les fous ### Mission 5 : La Forge (8x8) -- TRANSFORMATION - **Deverrouille** : aucun (nouveau type de cargo : Outils) - **Batiments** : Forge *transformee* en transformateur (bois → outils) - **Objectif** : livrer des outils a un nouveau batiment (Armurerie) - **Defi** : la route bois existante doit continuer, PLUS une branche vers la forge qui produit des outils ### Mission 6 : La Dame Blanche (10x10) - **Deverrouille** : Dame - **Batiments** : +Scierie Nord, +Grand Chantier (bois), +Arsenal (pierre) - **Objectif** : routes longue distance avec la dame ### Mission 7 : L'Armurerie (10x10) -- TRANSFORMATION - **Nouveau cargo** : Armes - **Batiments** : Armurerie (transforme pierre → armes) - **Objectif** : livrer des armes a une Garnison ### Mission 8 : Le Comptoir (12x12) - **Batiments** : Comptoir (transforme outils → or) - **Objectif** : livrer de l'or au Tresor Royal - **Defi** : chaine a 3 etapes : bois → outils → or ### Mission 9 : L'Expansion Finale (14x14) - **Batiments** : multiples transformateurs, murs complexes - **Objectif** : maintenir toutes les chaines tout en s'etendant - **Defi** : gestion de la congestion (risque de collisions) ### Mission 10 : Le Couronnement (14x14) - **Batiments** : Cathedrale (demande or + armes + outils) - **Objectif** : livrer les 3 types de cargo transforme - **Defi** : orchestrer l'ensemble des chaines logistiques simultanement ## Demands recurrentes (futur) Pour que le joueur doive "preserver ses automatisations", les demands pourraient devenir recurrentes : - Un batiment de demande **consomme** N unites par tour - S'il n'est plus approvisionne, il passe en etat "en penurie" - Condition de mission : **aucun** batiment en penurie pendant X tours consecutifs Cela force le joueur a maintenir ses routes existantes quand le terrain s'agrandit, au lieu de tout reconstruire. ## Implementation par phases ### Phase 1 : Modele Transformer - Ajouter `CellType.Transformer` et `TransformerDef` - Ajouter `TransformerState` avec buffers input/output - Integrer dans `BoardState` ### Phase 2 : Logique de conversion - Modifier `TurnExecutor` : sous-phase "transformation" entre production et transferts - Le transformateur agit comme une demande (recoit) ET une production (emet) ### Phase 3 : Nouveaux cargos - Ajouter `Tools`, `Arms`, `Gold` a `CargoType` - Couleurs visuelles pour chaque cargo - Mise a jour du `CampaignLoader` pour parser les transformateurs ### Phase 4 : Visuels - Couleur de cellule pour les transformateurs (ex: orange cuivre) - Animation de conversion (flash input → flash output) - Icones de cargo dans les pieces ### Phase 5 : Missions 5-10 - Ecrire les donnees JSON des missions 5 a 10 - Tester la solvabilite de chaque mission - Equilibrer les quantites (input/output ratios) ### Phase 6 (optionnel) : Demands recurrentes - Modifier `DemandState` pour tracker la consommation par tour - Ajouter un flag "en penurie" - Condition de victoire : pas de penurie pendant N tours