Construire TacticalGrid depuis la carte d'exploration (#3) #12

Merged
Reliodas merged 1 commit from feature/3-tacticalgrid-depuis-carte into develop 2026-06-19 16:21:53 +00:00
Owner

Closes #3.

Fait de la zone réelle la source unique du spatial tactique (au lieu d'une arène générée) et rend le déplacement du joueur jouable en combat.

Changements

  • TacticalGrid.from_zone(zone) : dimensions et murs dérivés du layout. World.is_wall délègue à cette grille — exploration et combat partagent la même source ; cellule monde == cellule tactique (identité). TacticalGrid.remove() nettoie l'occupation à la reprise.
  • World place les combattants depuis leurs positions courantes, passe la grille au CombatController, synchronise les jetons depuis la grille (source unique des positions) et fait reprendre l'exploration au héros sur sa case de fin de combat.
  • Déplacement joueur : l'overlay rétablit le bouton « Se déplacer » (signal move_mode_changed) ; World dessine la surbrillance des cases atteignables (ReachHighlight) et gère le clic-pour-bouger.

Critères d'acceptation

  • murs, limites et positions identiques en exploration et en combat ;
  • aucune copie divergente des positions (grille = source unique, héros resynchronisé à la reprise) ;
  • TacticalGrid reste un modèle pur et testable ;
  • tests sur construction, obstacles et occupation depuis une zone.

Tests

Suite complète 98/98 (331 assertions) — +6 tests (construction depuis zone, obstacles, remove, cohérence murs/positions exploration↔combat, placement des combattants, synchronisation position héros, bouton déplacement).

Note

Le combat est maintenant spatial sur la vraie carte ; il se résout car la rencontre se déclenche au contact (combattants adjacents). L'IA d'approche reste gloutonne (step_toward) et peut caler contre une cloison à contourner — limitation pré-existante (« IA d'approche minimale », AGENTS.md), candidate à un futur ticket de pathfinding. Hors périmètre #3.

Closes #3. Fait de la zone réelle la **source unique** du spatial tactique (au lieu d'une arène générée) et rend le **déplacement du joueur** jouable en combat. ## Changements - **`TacticalGrid.from_zone(zone)`** : dimensions et murs dérivés du `layout`. `World.is_wall` **délègue** à cette grille — exploration et combat partagent la même source ; cellule monde == cellule tactique (identité). `TacticalGrid.remove()` nettoie l'occupation à la reprise. - **`World`** place les combattants depuis leurs positions courantes, passe la grille au `CombatController`, **synchronise les jetons depuis la grille** (source unique des positions) et fait reprendre l'exploration au héros sur sa case de fin de combat. - **Déplacement joueur** : l'overlay rétablit le bouton « Se déplacer » (signal `move_mode_changed`) ; `World` dessine la surbrillance des cases atteignables (`ReachHighlight`) et gère le clic-pour-bouger. ## Critères d'acceptation - [x] murs, limites et positions identiques en exploration et en combat ; - [x] aucune copie divergente des positions (grille = source unique, héros resynchronisé à la reprise) ; - [x] `TacticalGrid` reste un modèle pur et testable ; - [x] tests sur construction, obstacles et occupation depuis une zone. ## Tests Suite complète **98/98** (331 assertions) — +6 tests (construction depuis zone, obstacles, `remove`, cohérence murs/positions exploration↔combat, placement des combattants, synchronisation position héros, bouton déplacement). ## Note Le combat est maintenant spatial sur la vraie carte ; il se résout car la rencontre se déclenche **au contact** (combattants adjacents). L'IA d'approche reste **gloutonne** (`step_toward`) et peut caler contre une cloison à contourner — limitation pré-existante (« IA d'approche minimale », `AGENTS.md`), candidate à un futur ticket de pathfinding. Hors périmètre #3.
Reliodas added this to the 0.15.0 milestone 2026-06-19 16:20:08 +00:00
feat: construit TacticalGrid depuis la carte et active le déplacement (#3)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_metadata/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
0137776e46
Fait de la zone réelle la source unique du spatial tactique, au lieu d'une
arène générée, et rend le déplacement du joueur jouable en combat.

- TacticalGrid.from_zone(zone) : dimensions et murs dérivés du layout. World
  délègue sa collision (is_wall) à cette grille — exploration et combat
  partagent la même source ; la cellule monde == cellule tactique (identité).
- World place les combattants depuis leurs positions courantes, passe la grille
  au CombatController, synchronise les jetons depuis la grille (source unique
  des positions) et fait reprendre l'exploration au héros sur sa case de fin de
  combat. TacticalGrid.remove() nettoie l'occupation à la reprise.
- Déplacement joueur : l'overlay rétablit le bouton « Se déplacer » (signal
  move_mode_changed) ; World dessine la surbrillance des cases atteignables
  (ReachHighlight) et gère le clic-pour-bouger.

Tests : suite complète 98/98 — construction depuis une zone, obstacles,
occupation/remove, cohérence murs/positions exploration↔combat, placement des
combattants, synchronisation de la position du héros, bouton de déplacement.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 1e84515db6 into develop 2026-06-19 16:21:53 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jeux/beaulieu-sur-brume#12
No description provided.