Modéliser la détection, la perception et l'hostilité (#4) #21

Merged
Reliodas merged 1 commit from feature/4-detection-perception-hostilite into develop 2026-06-19 21:56:30 +00:00
Owner

Closes #4.

Couche de logique pure (sans Node, sans changement de scène) déterminant quand une créature en perçoit une autre et si cette perception doit déclencher une rencontre. Fondation de #7 (participants détectés) et #6 (ligne de vue partagée).

Changements

  • TacticalGrid.has_line_of_sight(a, b) : tracé de Bresenham ; un mur entre les deux coupe la vue (les créatures ne masquent pas). Partagé avec les attaques à distance (#6).
  • Perception (statique) : can_detect (portée en mètres + ligne de vue, portée par défaut si non renseignée) et should_engage (détection ET hostilité). Détection, hostilité (faction) et engagement sont distincts ; vision omnidirectionnelle (les entités du monde n'ont pas d'orientation).

Critères d'acceptation

  • une cible hors portée ou masquée n'est pas détectée ;
  • une cible visible dans le champ de vision est détectée ;
  • une créature neutre détectée ne déclenche pas automatiquement un combat ;
  • la logique est indépendante des Node et couverte par des tests GUT.

Tests

Suite complète 128/128 (+9 : portée, masquage par mur, vue ignorant les occupants, séparation détection/hostilité/engagement).

Closes #4. Couche de logique **pure** (sans Node, sans changement de scène) déterminant quand une créature en perçoit une autre et si cette perception doit déclencher une rencontre. Fondation de #7 (participants détectés) et #6 (ligne de vue partagée). ## Changements - **`TacticalGrid.has_line_of_sight(a, b)`** : tracé de Bresenham ; un mur entre les deux coupe la vue (les créatures ne masquent pas). Partagé avec les attaques à distance (#6). - **`Perception`** (statique) : `can_detect` (portée en mètres + ligne de vue, portée par défaut si non renseignée) et `should_engage` (détection **ET** hostilité). Détection, hostilité (faction) et engagement sont distincts ; vision omnidirectionnelle (les entités du monde n'ont pas d'orientation). ## Critères d'acceptation - [x] une cible hors portée ou masquée n'est pas détectée ; - [x] une cible visible dans le champ de vision est détectée ; - [x] une créature neutre détectée ne déclenche pas automatiquement un combat ; - [x] la logique est indépendante des Node et couverte par des tests GUT. ## Tests Suite complète **128/128** (+9 : portée, masquage par mur, vue ignorant les occupants, séparation détection/hostilité/engagement).
Reliodas added this to the 0.15.0 milestone 2026-06-19 21:54:41 +00:00
feat: modélise la détection, la perception et l'hostilité (#4)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/pull_request_metadata/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
239a804915
Couche de logique pure, sans Node ni changement de scène, déterminant quand une
créature en perçoit une autre et si la perception doit déclencher une rencontre.

- TacticalGrid.has_line_of_sight(a, b) : tracé de Bresenham, un mur entre les
  deux coupe la vue (les créatures ne masquent pas). Partagé avec les attaques à
  distance (#6).
- Perception (statique) : can_detect (portée en mètres + ligne de vue, portée
  par défaut si non renseignée) et should_engage (détection ET hostilité). La
  détection, l'hostilité (faction) et l'engagement sont distincts : une cible
  neutre détectée n'engage pas le combat. Vision omnidirectionnelle (les entités
  du monde n'ont pas d'orientation).

Foundation consommée par #7 (sélection des participants détectés) et #6 (portée
à distance partageant la même ligne de vue).

Tests : suite complète 128/128 — portée, masquage par mur, vue ignorant les
occupants, séparation détection/hostilité/engagement.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit ca512e7771 into develop 2026-06-19 21:56:30 +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#21
No description provided.