Vue de Jeu
La page Vue de Jeu (GameViewPage) affiche l'interface de jeu en temps réel avec la grille, les joueurs, l'inventaire et les commandes de jeu.
GameViewPage
Type : ConsumerStatefulWidget with WidgetsBindingObserver
State : _GameViewPageState extends ConsumerState(GameViewPage)
Propriétés de constructeur
| Propriété | Type | Description |
|---|---|---|
gameCode |
String |
Code de la partie |
playerName |
String |
Nom du joueur actuel |
initialGameData |
Map(String, dynamic)? | Données initiales de la partie (pour initialisation rapide) |
sessionId |
String? |
ID de session unique pour le joueur |
Propriétés d'état
| Propriété | Type | Description |
|---|---|---|
_gameInitialized |
bool |
Indique si le jeu a été initialisé |
_isLoading |
bool |
Indique si le chargement est en cours |
_providerKey |
String |
Clé unique du provider (format: "gameCode|playerName") |
Méthodes
initState()
Description : Initialise la page de jeu, configure les observers et charge les données initiales.
Actions :
- Ajoute observer du lifecycle
- Construit
_providerKey= "{playerName}" - Si
initialGameDatafourni, initialise immédiatement le jeu - Désactive le chargement si données présentes
Retour : void
dispose()
Description : Nettoie les observers.
Retour : void
didChangeAppLifecycleState(AppLifecycleState state)
Description : Détecte le retour de l'application au premier plan.
Comportement : Attend 2 secondes après reprise, puis appelle _checkGameState()
Retour : void
_checkGameState()
Description : Vérifie l'état de la partie après retour au premier plan.
Flux :
- Recharge les canaux de chat
- Vérifie si le canal de partie existe
- Si canal n'existe pas → Trigger déconnexion
- Sinon → Demande mise à jour du jeu
- Vérifie si le joueur est toujours dans la partie
Retour : Future
void _handleQuitGame()
Description : Gère la sortie manuelle du jeu.
Actions :
- Invalide le provider
- Reconnecte le socket
- Navigue vers HomePage après 300ms
- Focus sur le canal général
Retour : void
void _showGameDisconnectedPopup(String message)
Description : Affiche popup de déconnexion et quitte le jeu.
Paramètres :
message: Message de déconnexion à afficher
Retour : void
void _showGameAbortedPopup()
Description : Affiche popup d'abandon de partie et retourne à l'accueil.
Retour : void
void _showGameEndedPopup(String winner)
Description : Affiche popup de fin de partie et navigue vers les stats.
Paramètres :
winner: Nom du joueur gagnant
Action : Navigue vers StatsPage avec toutes les statistiques
Retour : void
void _focusOnGeneralChannel()
Description : Active le canal de chat général.
Retour : void
Widget _buildGameContent(GameViewState gameViewState)
Description : Construit le contenu principal du jeu.
Retour : Widget
Widget _buildMainGameRow(GameViewState gameViewState)
Description : Construit la rangée principale avec grille et panneau latéral.
Layout : Row avec grille à gauche et panneau d'infos à droite
Retour : Widget
Widget _buildGridSection(GameViewState gameViewState)
Description : Construit la section de la grille de jeu.
Retour : Widget
Widget _buildRightPanel(GameViewState gameViewState)
Description : Construit le panneau droit avec infos joueur, joueurs, timer et inventaire.
Retour : Widget
Widget _buildCommandsRow(GameViewState gameViewState)
Description : Construit la rangée des commandes (boutons d'action, infos de tuile).
Retour : Widget
void _showQuitConfirmationDialog()
Description : Affiche dialogue de confirmation avant de quitter.
Retour : void
Éléments visuels
Grille de jeu (gauche)
- GridWidget : Affiche la grille du jeu avec tuiles, joueurs, items, portes
- Zoom et pan activés
- Affichage du fog of war
- Indicateurs de combat
- Animations de déplacement
Panneau droit
-
PlayerInfoWidget : Informations du joueur actuel
- Avatar et nom
- Points de vie
- Points d'action
- Argent
- Points de victoire
- Position actuelle
-
PlayersListWidget : Liste des joueurs en jeu
- Avatar, nom, statut
- Points de vie
- Ordre de tour
- Indicateur de joueur actif
-
GameTimerInfoWidget : Timer et infos de la partie
- Temps écoulé
- Tour actuel
- Mode de jeu
- Conditions de victoire
-
Inventaire : Items du joueur
- Liste scrollable
- Icône et nom de l'item
- Bouton d'utilisation
- Effets des items
Commandes (bas)
-
PlayerCommandsWidget : Boutons d'action
- Attaquer
- Ramasser objet
- Ouvrir/Fermer porte
- Utiliser objet
- Passer le tour
- Quitter
-
TileInformationWidget : Informations de la tuile sélectionnée
- Type de tuile
- Items présents
- Joueurs présents
- Portes adjacentes
- Effets spéciaux
Overlays et popups
- ChatboxWidget : Chat en temps réel
- UserProfileWidget : Profil utilisateur
- HelpPopupWidget : Aide contextuelle
- CombatMenuWidget : Menu de combat
- TrapPopupWidget : Popup de piège activé
- ItemRejectPopupWidget : Popup d'item refusé (inventaire plein)
- GameLoadingOverlay : Overlay de chargement
Composants utilisés
GridWidget
Widget affichant la grille de jeu interactive.
Propriétés
| Propriété | Type | Description |
|---|---|---|
gridViewModel |
GridViewModel |
Modèle de vue de la grille |
currentPlayer |
PlayerModel |
Joueur actuel |
onTileSelected |
Function(int, int) |
Callback de sélection de tuile |
PlayerInfoWidget
Widget affichant les informations du joueur actuel.
PlayersListWidget
Widget affichant la liste des joueurs.
Propriétés
| Propriété | Type | Description |
|---|---|---|
players |
List(PlayerModel) | Liste des joueurs |
currentPlayerName |
String |
Nom du joueur actuel |
activePlayerName |
String? |
Nom du joueur dont c'est le tour |
GameTimerInfoWidget
Widget affichant le timer et les informations de partie.
Propriétés
| Propriété | Type | Description |
|---|---|---|
gameDuration |
int |
Durée de la partie en secondes |
currentTurn |
int |
Tour actuel |
gameMode |
String |
Mode de jeu |
PlayerCommandsWidget
Widget des boutons d'action du joueur.
Propriétés
| Propriété | Type | Description |
|---|---|---|
onAttack |
VoidCallback |
Callback d'attaque |
onPickItem |
VoidCallback |
Callback ramasser objet |
onToggleDoor |
VoidCallback |
Callback ouvrir/fermer porte |
onUseItem |
VoidCallback |
Callback utiliser objet |
onEndTurn |
VoidCallback |
Callback passer le tour |
onQuit |
VoidCallback |
Callback quitter |
canAttack |
bool |
Si l'attaque est possible |
canPickItem |
bool |
Si ramasser est possible |
canToggleDoor |
bool |
Si toggle porte est possible |
isCurrentTurn |
bool |
Si c'est le tour du joueur |
TileInformationWidget
Widget affichant les informations d'une tuile.
Propriétés
| Propriété | Type | Description |
|---|---|---|
tileType |
TileType? |
Type de tuile |
items |
List(ItemModel)? | Items sur la tuile |
playersOnTile |
List(String)? | Noms des joueurs sur la tuile |
CombatMenuWidget
Widget du menu de combat avec animations.
Propriétés
| Propriété | Type | Description |
|---|---|---|
isVisible |
bool |
Contrôle l'affichage |
combatState |
CombatState |
État du combat |
onRollDice |
VoidCallback |
Callback lancer de dés |
onFlee |
VoidCallback |
Callback fuir |
onCombatEnd |
VoidCallback |
Callback fin de combat |
TrapPopupWidget
Popup affiché quand un piège est activé.
ItemRejectPopupWidget
Popup affiché quand l'inventaire est plein.
GameLoadingOverlay
Overlay de chargement avec spinner.
Providers utilisés
gameViewProvider(providerKey)
Type : StateNotifierProvider(GameViewNotifier, GameViewState)
Clé : String au format "gameCode|playerName"
Provider gérant l'état complet de la vue de jeu.
GameViewState
| Propriété | Type | Description |
|---|---|---|
currentGame |
OnGoingGameModel? |
Partie en cours |
currentPlayer |
PlayerModel? |
Joueur actuel |
gridViewModel |
GridViewModel? |
Vue de la grille |
isGameDisconnected |
bool |
Si la partie est déconnectée |
isGameAborted |
bool |
Si la partie est abandonnée |
isGameEnded |
bool |
Si la partie est terminée |
disconnectedMessage |
String? |
Message de déconnexion |
winner |
String? |
Nom du gagnant |
isCombatActive |
bool |
Si un combat est en cours |
selectedTilePosition |
Position? |
Position de la tuile sélectionnée |
GameViewNotifier - Méthodes principales
void setInitialGame(OnGoingGameModel game)
Description : Initialise le jeu avec les données initiales.
Retour : void
void requestGameUpdate()
Description : Demande une mise à jour de l'état du jeu.
Retour : void
void triggerGameDisconnected(String message)
Description : Déclenche l'état de déconnexion.
Retour : void
selectTile(int row, int col)
Description : Sélectionne une tuile sur la grille.
Retour : Future
attackPlayer(String targetName)
Description : Attaque un joueur.
Retour : Future
pickUpItem()
Description : Ramasse un objet.
Retour : Future
toggleDoor()
Description : Ouvre/Ferme une porte.
Retour : Future
useItem(String itemId)
Description : Utilise un objet de l'inventaire.
Retour : Future
endTurn()
Description : Termine le tour du joueur.
Retour : Future
combatProvider(providerKey)
Type : StateNotifierProvider(CombatNotifier, CombatState)
Provider gérant l'état des combats.
chatNotifierProvider
Type : StateNotifierProvider(ChatNotifier, ChatState)
Provider gérant le chat.
translationProvider
Type : Provider(TranslationWrapper)
Provider de traduction.
themeNotifierProvider
Type : StateNotifierProvider(ThemeNotifier, ThemeState)
Provider de thème.
helpPopupProvider
Type : StateNotifierProvider(HelpPopupNotifier, HelpPopupState)
Provider d'aide.
Écouteurs Socket.IO
La page écoute de nombreux events Socket.IO via le GameViewNotifier :
Events de jeu
- gameUpdated : Mise à jour de l'état du jeu
- playerMoved : Déplacement d'un joueur
- playerTurnChanged : Changement de tour
- itemPickedUp : Objet ramassé
- doorToggled : Porte ouverte/fermée
- gameEnded : Partie terminée
- gameAborted : Partie abandonnée
Events de combat
- combatStarted : Combat commencé
- combatRollResult : Résultat du lancer de dés
- combatEnded : Combat terminé
Events spéciaux
- trapActivated : Piège activé
- itemRejected : Objet refusé (inventaire plein)
- playerKicked : Joueur expulsé
- gameDisconnected : Déconnexion de partie
Navigation
- Partie terminée :
AppRoutes.stats.path→StatsPage(avec params) - Quitter/Déconnecté/Abandonné :
AppRoutes.home.path→HomePage
Lifecycle management
La page implémente WidgetsBindingObserver pour:
- App au premier plan : Vérifier l'état du jeu et du joueur
- Détection de déconnexion : Afficher popup et rediriger
- Synchronisation : Recharger les canaux et l'état du jeu
Gestion de l'état de jeu
Initialisation
- Données initiales passées via navigation
- Parsing JSON →
OnGoingGameModel - Initialisation du provider avec
setInitialGame() - Connexion Socket.IO automatique
Mise à jour en temps réel
- Réception d'events Socket.IO
- Mise à jour du state
- Rebuild automatique des widgets
Fin de partie
- Event
gameEndedreçu - Stockage du gagnant et des stats
- Affichage popup
- Navigation vers
StatsPageavec toutes les données
Détection de déconnexion
Scénarios
- Retour au premier plan : Vérifie si canal existe et si joueur toujours dans partie
- Canal supprimé : Déclenche déconnexion
- Joueur retiré : Déclenche déconnexion
- Socket déconnecté : Events ne sont plus reçus
Actions
- Affichage popup avec message
- Nettoyage du provider
- Reconnexion Socket.IO
- Retour à HomePage