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 :

  1. Ajoute observer du lifecycle
  2. Construit _providerKey = "gameCode|{playerName}"
  3. Si initialGameData fourni, initialise immédiatement le jeu
  4. 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 :

  1. Recharge les canaux de chat
  2. Vérifie si le canal de partie existe
  3. Si canal n'existe pas → Trigger déconnexion
  4. Sinon → Demande mise à jour du jeu
  5. Vérifie si le joueur est toujours dans la partie

Retour : Future

void _handleQuitGame()

Description : Gère la sortie manuelle du jeu.
Actions :

  1. Invalide le provider
  2. Reconnecte le socket
  3. Navigue vers HomePage après 300ms
  4. 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 :

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 :

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)

Panneau droit

  1. PlayerInfoWidget : Informations du joueur actuel

    • Avatar et nom
    • Points de vie
    • Points d'action
    • Argent
    • Points de victoire
    • Position actuelle
  2. PlayersListWidget : Liste des joueurs en jeu

    • Avatar, nom, statut
    • Points de vie
    • Ordre de tour
    • Indicateur de joueur actif
  3. GameTimerInfoWidget : Timer et infos de la partie

    • Temps écoulé
    • Tour actuel
    • Mode de jeu
    • Conditions de victoire
  4. Inventaire : Items du joueur

    • Liste scrollable
    • Icône et nom de l'item
    • Bouton d'utilisation
    • Effets des items

Commandes (bas)

Overlays et popups

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

Events de combat

Events spéciaux

Navigation

Lifecycle management

La page implémente WidgetsBindingObserver pour:

Gestion de l'état de jeu

Initialisation

  1. Données initiales passées via navigation
  2. Parsing JSON → OnGoingGameModel
  3. Initialisation du provider avec setInitialGame()
  4. Connexion Socket.IO automatique

Mise à jour en temps réel

Fin de partie

Détection de déconnexion

Scénarios

  1. Retour au premier plan : Vérifie si canal existe et si joueur toujours dans partie
  2. Canal supprimé : Déclenche déconnexion
  3. Joueur retiré : Déclenche déconnexion
  4. Socket déconnecté : Events ne sont plus reçus

Actions