Game States & Substates
Documentation technique pour le testing et debugging du flow de jeu.
Vue d'ensemble
Main States
| State |
Description |
intro |
Séquence d'introduction (cinématique, naming, premier déplacement) |
bike |
Mission de réparation du vélo |
pylone |
Quête du pylone (alert → searching → helped → manipulation) |
ferme |
Mission de réparation de la ferme |
outro |
Fin du jeu |
Intro (GameStep)
Étapes
| Step |
Trigger |
Action |
Passage vers |
intro |
Initial |
État initial |
Auto → sequence_video quand sceneReady: true |
sequence_video |
GameFlow |
Déclenche la cinématique dans GameCinematics |
Fin cinématique → naming |
naming |
IntroUI |
Affiche l'input pour le prénom |
Submit → start-move |
start-move |
GameFlow |
Active le mouvement (canMove: true) |
Via zone "fabrikExit" → bike |
Transition vers bike
- Trigger: Zone
fabrikExit dans zones.ts
- Action:
advanceGameState() dans ZoneDetection.tsx
- Résultat:
mainState: "bike", intro.hasCompleted: true
Bike (MissionStep)
Transition vers pylone
- Trigger:
bike.currentStep: "done"
- Action:
completeBikeState() dans useGameStore
- Résultat:
mainState: "pylone", pylone.currentStep: "locked"
Pylone (PyloneStep)
Étapes
| Step |
Trigger |
Action |
Passage vers |
locked |
Initial (après bike) |
État initial |
Bypass automatique → alert via advanceGameState() |
alert |
advanceGameState() |
Affiche l'alerte (à implémenter) |
Via advanceGameState() |
searching |
advanceGameState() |
Déclenché par zone "searchingZone" |
Via advanceGameState() |
helped |
Interaction avec NPCHelper |
Dialogue avec le villageois |
Via interaction 3D |
manipulation |
Interaction avec PyloneDestroyed |
Interaction avec l'objet central |
Via advanceGameState() → outro |
Bypass automatique
Transition vers outro
- Trigger:
pylone.currentStep: "manipulation" + advanceGameState()
- Action:
advancePyloneStep() détecte fin de la séquence
- Résultat:
mainState: "outro"
Ferme (MissionStep)
Transition vers outro
- Trigger:
ferme.currentStep: "done"
- Action:
completeFermeState() dans useGameStore
- Résultat:
mainState: "outro", ferme.irrigationFixed: true
Outro
Debug Panel
Le debug panel permet de tester toutes les transitions :
Utilisation
- Ouvrir le jeu en mode debug (
Debug: true dans Debug.ts)
- Le panneau "Game State" apparaît en bas à gauche
- Main state: Sélectionner le state principal
- Sub state: Sélectionner le sub-state
- Previous/Next step: Avancer ou reculer d'un step
- Reset: Remettre à l'état initial
Raccourcis clavier
| Action |
Clavier |
| Avancer |
Debug panel button |
| Reculer |
Debug panel button |
| Reset |
Debug panel button |
Tester l'intro
- Vérifier que
sceneReady: false au démarrage
- Attendre que le loader termine (
sceneReady: true)
- Vérifier
intro.currentStep: "intro" → auto vers sequence_video
- Si cinématique fonctionne :
sequence_video → naming
- Entrer un prénom :
naming → start-move
- Vérifier
canMove: true après start-move
- Entrer dans la zone
fabrikExit → mainState: "bike"
Tester bike
- Via debug panel, avancer jusqu'à
done
- Vérifier
mainState: "pylone"
Tester pylone
- Via debug panel, avancer (bypass
locked → alert)
- Vérifier
pylone.currentStep: "alert"
- Avancer :
alert → searching → helped → manipulation
- Après
manipulation, vérifier mainState: "outro"
Tester ferme
- Via debug panel, avancer dans bike jusqu'à
done
- Vérifier
mainState: "pylone" → ferme (après pylone)
- Avancer jusqu'à
done
- Vérifier
mainState: "outro"
Fichiers clés
| Fichier |
Rôle |
src/managers/stores/useGameStore.ts |
Store Zustand avec toutes les actions |
src/types/game.ts |
Définition de GameStep |
src/types/gameplay/pylone.ts |
Définition de PyloneStep |
src/types/gameplay/repairMission.ts |
Définition de MissionStep |
src/components/game/GameFlow.tsx |
Logique de transition de l'intro |
src/components/zone/ZoneDetection.tsx |
Déclenchement des zones |
src/components/ui/debug/GameStateDebugPanel.tsx |
Outil de debug |
État initial