fix: nettoyer les créatures mortes pendant un combat multi-ennemis (#40) #46
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: jeux/beaulieu-sur-brume#46
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/40-cleanup-dead-combatants"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #40
Pendant une rencontre à plusieurs ennemis, une créature morte restait occupante de sa case dans
TacticalGridjusqu'à la fin complète du combat ;World._processignorait son jeton (qui pouvait garder sa teinte « sélectionné ») ; et si l'ennemi primaire mourait, le panneau de PV ennemi retombait sur lui faute de sélection.Changements
CombatController._cleanup_dead_combatants(): nettoyage centralisé et idempotent appelé après chaque attaque du héros, aprèsmanager.begin_turn()(mort de début de tour) et après chaque tour ennemi. Parcourt les ennemis morts,grid.remove(creature)libère leur case (déplacement/pathfinding ne sont plus bloqués) et invalide la sélection. N'utilise pas le signalcreature_died(aucune dépendance de vue) ;grid.removeest idempotent (_positions.has) ⇒ pas de double retrait.Enemy.set_defeated(on): teinte grisée estompée, prioritaire sur targetable/selected.World._processappelleset_defeated(true)pour un participant mort au lieu de l'ignorer.CombatController.first_living_enemy()+CombatOverlay._enemy_panel_target: le panneau de PV suit la cible sélectionnée si elle est vivante, sinon un ennemi vivant (jamais un primaire mort tant qu'un autre survit).select_target/can_attackrefusent déjà une cible morte ; l'invalidation après mort passe par_cleanup_dead_combatants→_validate_selected_target.Critères d'acceptation
grid.removeidempotent, pas decreature_died) ;Tests
tests/unit/test_combat_controller.gd:test_dead_primary_frees_cell_and_panel_falls_back_to_living(case libérée, sélection effacée, repli vivant, combat continue),test_dead_enemy_cleaned_outside_apply_attack(mort hors_apply_attacknettoyée à la transition de tour),test_cleanup_dead_combatants_is_idempotent.