# États de perception et aggro des monstres

Le gestionnaire expose **Monstres → États et aggro**. La logique demeure dans
le jeu 2D ; le pont 3D affiche les mouvements et attaques qui en résultent.

## Analyse et changement

Avant cette refonte, un booléen de détection choisissait le mouvement et
autorisait les patterns d’attaque. Le contact fonctionnait indépendamment.
Il n’y avait ni état d’hostilité, ni mémoire, ni délai pour stabiliser les états.

La perception et l’intention sont maintenant distinctes de la frise d’attaque :

| État | Déplacement | Patterns d’attaque | Contact configuré |
|---|---|---|---|
| `undetected` | `undetected_movement`, errance | Interdits | Actif, déclenche l’aggro |
| `detected` | `detected_movement`, réaction `hero_response` | Interdits | Actif, déclenche l’aggro |
| `aggroed` | `aggro_movement`, réaction `aggro_response` | Autorisés si le joueur est vu et le cooldown prêt | Actif, rafraîchit l’aggro |

Les statuts de combat qui bloquaient déjà les attaques/contact gardent leur effet.
L’option de dégâts de contact de la fiche reste nécessaire. Un monstre sans
contact activé ne gagne pas de dégâts de contact avec cette refonte.

## Déclencheurs et temporisations

- `aggro_on_detection` : la détection peut déclencher l’aggro.
- `aggro_detection_delay` : durée de visibilité continue requise, 0 = immédiat.
- `aggro_on_damage` : un coup infligé par le héros déclenche l’aggro.
- Un contact infligeant ses dégâts déclenche toujours l’aggro, même si ces deux
  options sont désactivées. Il passe outre le délai de réentrée.
- `aggro_memory_duration` : temps de recherche après perte de vue. Le monstre
  utilise la dernière position connue, jamais la position actuelle invisible.
- `state_cooldown` : durée minimale avant une transition ordinaire. L’entrée
  en aggro est prioritaire ; la disparition/mort de la cible annule l’aggro.
- `aggro_reentry_cooldown` : délai après abandon avant une nouvelle aggro par
  détection. Recevoir un coup autorisé ou infliger un contact passe outre.
- `detection_hysteresis` : marge de distance pour conserver une perception
  déjà acquise. N’agrandit ni la distance d’acquisition ni le cône de vision.

Une attaque déjà annoncée termine avant l’oubli de la cible : son suivi,
verrouillage et délai d’esquive restent ceux du pattern. Aucun nouveau pattern
ne démarre pendant une recherche sans visibilité. Le cooldown d’IA ne remplace
ni le cooldown global des attaques ni les cooldowns individuels des entrées.

La perception reste celle du projet : distance et cône, sans nouveau test
d’occlusion par les murs. Cette refonte n’introduit pas de navigation ni d’ouïe.

## Réglages conseillés pour l’auteur

- Hostile : aggro à la détection, délai nul ou court.
- Neutre : pas d’aggro à la détection, aggro au coup reçu.
- Pacifique : les deux déclencheurs désactivés et contact désactivé.
- Combattant à distance : réaction en aggro `avoid`, mouvement dédié, avec les
  patterns de projectiles déjà disponibles.

Sans nouveaux champs, la détection déclenche immédiatement l’aggro ; le
mouvement et la réaction en aggro héritent des anciens choix après détection.
La mémoire vaut 3 s, la stabilité d’état 0,25 s, le repos après abandon 1 s,
et la marge de perception 20 px. Le maître et le brouillon ne sont pas réécrits.

Le principe de mémoire de perception et de distance de perte distincte se
retrouve dans la [documentation de perception d’Epic](https://dev.epicgames.com/documentation/en-us/unreal-engine/ai-perception?application_version=4.27).
Les durées ci-dessus sont des choix pour BIG EGG, entièrement réglables.

## Vérification

`res://scenes/main/enemy_awareness_check.tscn` vérifie les transitions,
la mémoire, la priorité du contact, la restriction des patterns, la réaction
au vrai coup du héros, le mouvement en aggro et la normalisation Godot.
Les tests `enemy_awareness_test.js` et `enemy_awareness_validation_test.php`
vérifient les réglages d’auteur, leurs valeurs par défaut, leurs bornes et les
références à un mouvement utilisé uniquement en aggro.
Le smoke test et le contrôle du pont 3D couvrent les comportements existants.
