feat: affichage du groupe en combat et retours visuels ciblés (#72) #87

Merged
Reliodas merged 1 commit from feature/72-overlay-group into develop 2026-06-22 11:56:57 +00:00
Owner

Closes #72.

L'overlay ne possédait qu'un panneau joueur et un panneau ennemi : il suivait l'acteur actif dans le panneau principal mais n'affichait pas le groupe, et _spawn_damage_float() associait tout dégât ne touchant pas controller.hero au panneau ennemi — les dégâts reçus par un allié apparaissaient du mauvais côté. Dernier ticket de code de l'audit 0.16.0.

Changements

  • Panneau de groupe (overlay) : liste les membres actifs (héros + alliés participant) avec nom, PV, mode de contrôle, état actif/à terre, marqueurs meneur (★) et acteur courant (▶). Construit en code, rafraîchi à bind/_refresh. Le panneau principal reste lié à l'acteur actif (#57), le panneau ennemi à la cible.
  • Routage des retours par équipe : nouveau _panel_for(target) → panneau joueur si la cible appartient à HERO_TEAM (héros ou allié), ennemi sinon. _spawn_damage_float() l'utilise : un allié blessé n'apparaît plus jamais sur le panneau ennemi.
  • Reconstruction propre : la liste se reconstruit par détachement immédiat (remove_child avant queue_free, différé) pour éviter l'accumulation de lignes obsolètes dans la même frame ; elle se vide au unbind (aucune ligne ni connexion résiduelle). Même correctif appliqué au PartyPanel d'exploration.

Critères d'acceptation

  • tous les membres actifs sont visibles pendant le combat ;
  • l'acteur courant et le leader sont distinguables (▶ et ★) ;
  • la chute d'un membre met à jour son état (« à terre ») sans le confondre avec un ennemi ;
  • un dégât sur un allié n'affiche jamais le feedback sur le panneau ennemi ;
  • deux classes différentes affichent toujours leurs actions propres (régression #57 verte) ;
  • l'overlay se nettoie sans connexions résiduelles.

Tests

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

  • tests/unit/test_combat_overlay_group.gd : la liste contient une entrée par membre actif (héros + 2 alliés → 3) ; _panel_for route héros/allié → panneau joueur et ennemi → panneau ennemi ; un seul acteur marqué « ▶ » et c'est l'acteur actif ; un allié tombé affiché « à terre » ; bind/unbind/bind sans double connexion combat_finished et liste vidée au délien.
  • tests/unit/test_combat_overlay.gd (régression #57) : Second Wind visible pour le Guerrier, absent pour le Magicien.

Validation manuelle (différée au #78)

Lisibilité du panneau de groupe (positions, plusieurs ennemis, flottants de dégâts) à valider dans Godot au #78.

Closes #72. L'overlay ne possédait qu'un panneau joueur et un panneau ennemi : il suivait l'acteur actif dans le panneau principal mais n'affichait pas le groupe, et `_spawn_damage_float()` associait tout dégât ne touchant pas `controller.hero` au panneau ennemi — les dégâts reçus par un allié apparaissaient du mauvais côté. Dernier ticket de code de l'audit 0.16.0. ## Changements - **Panneau de groupe** (overlay) : liste les membres actifs (héros + alliés participant) avec **nom, PV, mode de contrôle, état actif/à terre**, marqueurs **meneur (★)** et **acteur courant (▶)**. Construit en code, rafraîchi à `bind`/`_refresh`. Le panneau principal reste lié à l'acteur actif (#57), le panneau ennemi à la cible. - **Routage des retours par équipe** : nouveau `_panel_for(target)` → panneau **joueur** si la cible appartient à `HERO_TEAM` (héros **ou** allié), **ennemi** sinon. `_spawn_damage_float()` l'utilise : un allié blessé n'apparaît plus jamais sur le panneau ennemi. - **Reconstruction propre** : la liste se reconstruit par **détachement immédiat** (`remove_child` avant `queue_free`, différé) pour éviter l'accumulation de lignes obsolètes dans la même frame ; elle se vide au `unbind` (aucune ligne ni connexion résiduelle). Même correctif appliqué au `PartyPanel` d'exploration. ## Critères d'acceptation - [x] tous les membres actifs sont visibles pendant le combat ; - [x] l'acteur courant et le leader sont distinguables (▶ et ★) ; - [x] la chute d'un membre met à jour son état (« à terre ») sans le confondre avec un ennemi ; - [x] un dégât sur un allié n'affiche jamais le feedback sur le panneau ennemi ; - [x] deux classes différentes affichent toujours leurs actions propres (régression #57 verte) ; - [x] l'overlay se nettoie sans connexions résiduelles. ## Tests Suite GUT complète verte : **313 tests** (depuis 308), stable sur plusieurs exécutions. - `tests/unit/test_combat_overlay_group.gd` : la liste contient une entrée par membre actif (héros + 2 alliés → 3) ; `_panel_for` route héros/allié → panneau joueur et ennemi → panneau ennemi ; un seul acteur marqué « ▶ » et c'est l'acteur actif ; un allié tombé affiché « à terre » ; `bind`/`unbind`/`bind` sans double connexion `combat_finished` et liste vidée au délien. - `tests/unit/test_combat_overlay.gd` (régression #57) : Second Wind visible pour le Guerrier, absent pour le Magicien. ### Validation manuelle (différée au #78) Lisibilité du panneau de groupe (positions, plusieurs ennemis, flottants de dégâts) à valider dans Godot au #78.
feat: affichage du groupe en combat et retours visuels ciblés (#72)
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
fb3a06539c
L'overlay n'avait qu'un panneau joueur et un panneau ennemi, et
_spawn_damage_float associait tout dégât non porté à hero au panneau
ennemi (un allié blessé apparaissait du mauvais côté).

L'overlay liste désormais les membres actifs (nom, PV, mode de contrôle,
état actif/à terre) avec marqueurs meneur (★) et acteur courant (▶), en
plus du panneau principal (acteur actif) et ennemi. _panel_for(target)
route les retours par équipe (HERO_TEAM → côté joueur, sinon ennemi) : un
allié blessé ne s'affiche jamais sur le panneau ennemi. La liste de groupe
se reconstruit par détachement immédiat (évite l'accumulation due au
queue_free différé) et se vide au délien.

Même correction de reconstruction appliquée au panneau de groupe
d'exploration (PartyPanel).

Tests : test_combat_overlay_group.gd — liste des membres actifs, routage
des dégâts par équipe, marqueur d'acteur courant unique, allié « à terre »,
bind/unbind répété sans double connexion ni résidu. Suite 313 tests, stable.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 79849854da into develop 2026-06-22 11:56:57 +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#87
No description provided.