InputMapper tracks a mouse-down over a placed piece and promotes it to drag mode once the cursor travels past an 8px threshold. Legal drop cells (those where the piece's start→end vector still fits a legal placement) are highlighted in green. Releasing on a legal cell emits a RelocateRequested signal; Main feeds it to MovePieceCommand, which is already undoable via the existing history stack. Escape or releasing on an invalid cell cancels. The harness gains a relocate() helper so UI tests can script drag-and-drop moves without synthesizing motion events.
81 lines
3.3 KiB
Markdown
81 lines
3.3 KiB
Markdown
# 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.
|
|
|
|
### 1.2 Drag & drop des pieces placees
|
|
`MovePieceCommand` + `PieceMovedByPlayerEvent` existent cote engine.
|
|
Cote Godot : permettre de glisser une piece placee pour deplacer son point de
|
|
depart. Les arrivees legales se recalculent pendant le drag. Application
|
|
atomique au relachement (entre deux tours).
|
|
|
|
### 1.3 Collision — camera pan/zoom + notification
|
|
L'engine emet deja `PieceReturnedToStockEvent` + auto-pause. Il reste a :
|
|
- Animer un pan + zoom de la camera vers la case de collision.
|
|
- Afficher une notification dans un coin de l'ecran
|
|
(ex : "Tour II detruite par Dame — retournee au stock").
|
|
- Reprise a Espace apres lecture.
|
|
|
|
### 1.4 Touche Suppr pour retirer une piece
|
|
Le bouton `[Retirer]` du `DetailPanel` existe. Ajouter en complement :
|
|
selection + `Delete` → meme effet que le bouton.
|
|
|
|
### 1.5 Cinematique de transition de mission
|
|
Sur `MissionStartedEvent` (hors mission 0) :
|
|
- Titre "Nouvelle mission" plein ecran en fade-in.
|
|
- Lock pan/zoom ; la camera se deplace vers la nouvelle zone.
|
|
- Animation d'expansion pour les cases debloquees par le `TerrainPatch`.
|
|
- Le titre glisse ensuite vers le panneau d'objectifs avant de disparaitre
|
|
(guide l'oeil).
|
|
- Unlock pan/zoom, la simulation reprend.
|
|
|
|
### 1.6 Visualisation des trajets
|
|
`TrajectView` existe. Manque :
|
|
- Fleches directionnelles sur le trait.
|
|
- Pulsation legere du trait quand la piece est en mouvement.
|
|
- Couleur unique par piece pour distinguer les chaines.
|
|
|
|
---
|
|
|
|
## 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.1 Missions supplementaires
|
|
- **"L'Expansion Finale"** (14x14) : multiples transformateurs, murs
|
|
complexes. Defi : maintenir toutes les chaines en s'etendant ; gestion de
|
|
la congestion / collisions.
|
|
- **"Le Couronnement final"** (14x14) : Cathedrale qui demande or + armes +
|
|
outils simultanement. Orchestrer l'ensemble des chaines logistiques.
|
|
|
|
Actuel mission 7 "Le Couronnement" = transformation outils→or seule.
|
|
La renommer ou l'inserer comme mission intermediaire et ajouter les deux
|
|
missions ci-dessus pour retrouver la progression 10 missions de la vision
|
|
initiale.
|
|
|
|
### 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.
|