Objectif
Gérer la santé du personnage, appliquer des dégâts, et déclencher une fin de partie claire (victoire ou défaite) avec animations, UI, blocage des contrôles et affichage d’un menu contextuel.
 Fonctionnement général

- Le personnage possède une variable Health, et une limite MaxHealth.

- Lorsqu’un projectile ou un événement cause des dégâts, Health est décrémentée.

- Si Health <= 0, la variable IsDead est activée → déclenche le Game Over.

- En cas de victoire, un événement spécifique (Victory) est lancé.

- Chaque fin de partie (victoire/défaite) joue une animation, désactive les contrôles, affiche un menu       (VictoryWidget ou GameOverWidget), et fige le jeu (Set Game Paused).

Blueprints impliqués :
BP_Character (logique de santé), BP_Projectile (déclenche les dégâts), GameOver, Victory (événements appelés selon le contexte), GameOverWidget, VictoryWidget
Détail du pipeline (étape par étape)
[Étape 1] Système de santé
- Event AnyDamage est déclenché lorsqu’un dommage est appliqué.

- Health est décrémentée et clampée pour rester ≥ 0.

- Si Health <= 0, la variable IsDead est activée.

- Le custom event GameOver est appelé.

[Étape 2] Réaction à un projectile
- Collision dans BP_Projectile → cast vers le personnage (BP_GhoulieCharacter).

- Si valide, une animation de hit est jouée.

- Puis Apply Damage est appelé pour déclencher la logique du Event AnyDamage.

- Le projectile est ensuite désactivé (collision off) puis détruit.

[Étape 3] Game Over
- L’événement GameOver désactive les mouvements (Set Movement Enabled),
désactive les collisions sur le capsule.

- Joue une animation de mort (Death Montage).

- Récupère le player controller, désactive l’input.

- Crée et affiche le GameOverWidget.

- Active Set Game Paused, montre le curseur et assigne le focus clavier au bouton "Retry".

[Étape 4] Victoire
- L’événement Victory suit une logique parallèle :

- Désactive les contrôles et les collisions.

- Joue une animation de victoire.

- Affiche le VictoryWidget, fige le jeu et met le focus sur le bouton.

[Étape 5] Sécurité de condition
- Un Do Once empêche que Victory ou GameOver soient appelés plusieurs fois.

- Le booléen IsDead permet aussi de bloquer d'autres inputs/attaques une fois mort.
Problèmes rencontrés

- Déclenchement multiple de l’événement GameOver sur des dégâts consécutifs.

- Le curseur de souris n’apparaissait pas correctement au moment du Set Game Paused.

- La collision restait active même après la mort dans certaines situations.
Solution implémentée

- Ajout d’un Do Once dès le début du Game Over / Victory pour prévenir tout double appel.

- Ajout d’un Delay juste avant le Set Game Paused pour garantir que le widget ait bien le focus.

- Désactivation explicite de la collision (Set Collision Enabled) sur le capsule component.
Tests et validation
Debug via Print String à différents moments du code pour connaître la source des problèmes
 Visuels
Colle ici des captures d’écran :
Blueprint

Résultat dans le viewport

Console debug si pertinent
Notes personnelles ou améliorations futures

Ajouter une transition visuelle (écran fondu ou effet glitch) avant l’apparition du widget.

Ajouter un effet sonore distinct pour victoire et défaite.

Prévoir une animation alternative si la mort vient d’un projectile spécifique (ex : explosion).

Mettre des points de Respawn pour ne pas recommencer le niveau du début
Back to Top