DemandDef gains optional ConsumptionPerTurn and SustainTurns. When ConsumptionPerTurn > 0 the demand maintains a buffer filled by deliveries and drained each turn. Shortage fires the first turn the buffer can't cover consumption; it clears when the buffer refills. SustainedTurns counts consecutive non-shortage turns, and IsSatisfied flips to true once it meets SustainTurns — so the victory condition becomes "no shortage for N consecutive turns" as soon as a mission opts in. Classic demands (ConsumptionPerTurn = 0) behave exactly as before. TurnExecutor runs the consumption sub-phase after transfers. Two new events (DemandShortageStarted / DemandShortageCleared) let the presentation surface the state later. BoardSnapshot + CampaignLoader carry the new fields; no existing mission opts in yet, so campaign_01.json is unaffected.
1.3 KiB
Chessistics — Plan de travail (restant)
Consolidation des sections non implementees des anciens PLAN_missions.md et
PLAN_leveldesign.md. Le moteur (black-box sim, campagne, transformateurs,
missions 1-7) est en place. Ce qui suit concerne la finition UX, les visuels
et l'extension de la campagne.
1. UX / Presentation — gaps Godot
Le moteur expose deja les commandes et events requis ; cote Godot il manque les surfaces d'interaction et d'animation.
2. Extension de la campagne
campaign_01.json compte actuellement 7 missions (Pion → Tour → Cavalier →
Fou → Dame + 2 transformateurs). La vision GDD/plan prevoit une campagne
plus longue et un final orchestrant toutes les chaines.
2.2 Demandes recurrentes (post-campagne 1)
Pour forcer la preservation des automatisations entre missions :
- Une demande consomme N unites par tour.
- Si plus approvisionnee → etat "en penurie".
- Condition : aucune demande en penurie pendant X tours consecutifs.
Implique : nouveau champ sur DemandState, flag shortage, regle de victoire
parametrable par mission. A valider via playtest avant d'ajouter au scope.
3. Polish visuel des transformateurs
Couleur de cellule dediee (orange cuivre), animation flash input → flash
output sur CargoConvertedEvent, icones de cargo sur les pieces porteuses.