fix: résultat d'exécution fiable des actions de combat (#77) #82

Merged
Reliodas merged 1 commit from feature/77-action-result-contract into develop 2026-06-22 11:22:10 +00:00
Owner

Closes #77.

CombatController.execute_action("end_turn") renvoyait true même hors tour joueur ou avant le démarrage du combat, alors que player_end_turn() ne faisait rien (reproduction confirmée avant start()). Ce contrat trompait l'UI, les tests et toute future commande générique. Quatrième correctif de l'audit 0.16.0.

Changements

  • scripts/combat_controller.gd : player_end_turn() renvoie désormais un boolvrai uniquement s'il s'agissait d'un tour joueur et que le tour a été terminé, faux sinon (avant start(), hors tour joueur, combat fini). execute_action("end_turn") propage ce résultat (plus de return true inconditionnel).
  • Les autres branches (attack/dodge/second_wind) renvoyaient déjà le booléen réel de leur action ; un id inconnu ou une action désactivée renvoie faux sans consommer de ressource, en cohérence avec available_actions().enabled.
  • L'overlay (_on_end_turn) ignore le retour (déjà gardé par is_player_turn).

Critères d'acceptation

  • end_turn renvoie faux hors tour joueur et vrai lorsqu'il termine effectivement le tour ;
  • une action désactivée ne consomme aucune ressource ;
  • un id inconnu reste refusé ;
  • l'UI ne peut pas déclencher une commande déclarée indisponible ;
  • le cas solo et multi-acteurs reste stable.

Tests

Suite GUT complète verte : 289 tests (depuis 284), stable sur plusieurs exécutions.

  • tests/unit/test_combat_actions.gd : toutes les actions exécutables avant start() et après fin de combat → faux (avec cohérence enabled == false) ; end_turn au tour du joueur → vrai ; alternance effective des deux acteurs contrôlables via player_end_turn() ; attaque désactivée (héros hors portée) → faux sans consommer l'Action ; id inconnu refusé.
Closes #77. `CombatController.execute_action("end_turn")` renvoyait `true` même hors tour joueur ou avant le démarrage du combat, alors que `player_end_turn()` ne faisait rien (reproduction confirmée avant `start()`). Ce contrat trompait l'UI, les tests et toute future commande générique. Quatrième correctif de l'audit 0.16.0. ## Changements - `scripts/combat_controller.gd` : `player_end_turn()` renvoie désormais un `bool` — **vrai uniquement** s'il s'agissait d'un tour joueur et que le tour a été terminé, **faux** sinon (avant `start()`, hors tour joueur, combat fini). `execute_action("end_turn")` propage ce résultat (plus de `return true` inconditionnel). - Les autres branches (`attack`/`dodge`/`second_wind`) renvoyaient déjà le booléen réel de leur action ; un id inconnu ou une action désactivée renvoie faux sans consommer de ressource, en cohérence avec `available_actions().enabled`. - L'overlay (`_on_end_turn`) ignore le retour (déjà gardé par `is_player_turn`). ## Critères d'acceptation - [x] end_turn renvoie faux hors tour joueur et vrai lorsqu'il termine effectivement le tour ; - [x] une action désactivée ne consomme aucune ressource ; - [x] un id inconnu reste refusé ; - [x] l'UI ne peut pas déclencher une commande déclarée indisponible ; - [x] le cas solo et multi-acteurs reste stable. ## Tests Suite GUT complète verte : **289 tests** (depuis 284), stable sur plusieurs exécutions. - `tests/unit/test_combat_actions.gd` : toutes les actions exécutables avant `start()` et après fin de combat → faux (avec cohérence `enabled == false`) ; `end_turn` au tour du joueur → vrai ; **alternance effective** des deux acteurs contrôlables via `player_end_turn()` ; attaque désactivée (héros hors portée) → faux **sans** consommer l'Action ; id inconnu refusé.
fix: rend fiable le résultat d'exécution des actions de combat (#77)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
2119226156
execute_action("end_turn") renvoyait true même hors tour joueur ou avant
le démarrage, alors que player_end_turn() ne faisait rien — un contrat
trompeur pour l'UI et toute commande générique.

player_end_turn() renvoie désormais un bool (vrai seulement s'il a
réellement terminé un tour joueur) ; execute_action propage ce résultat.
Un id inconnu ou une action désactivée ne produit aucun effet ni
consommation, en cohérence avec available_actions().enabled.

Tests : toutes les actions avant start() / après fin de combat → faux ;
end_turn au tour du joueur → vrai et alternance effective entre deux
acteurs contrôlables ; attaque sans cible désactivée → faux sans
consommer l'Action ; id inconnu refusé. Suite 289 tests, stable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 8578adb82f into develop 2026-06-22 11:22:10 +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#82
No description provided.