Création de Personnage

La page de Création de Personnage (CharacterCreationPageComponent) permet aux utilisateurs de créer un personnage avec des attributs personnalisés avant de rejoindre ou de créer une partie. Cette page sert de transition entre la sélection d'un jeu et l'entrée dans la salle d'attente.

CharacterCreationPageComponent

Propriétés

Propriété Type Description
characterForm FormGroup Formulaire pour les données du personnage
avatars string[] Liste des avatars disponibles
selectedAvatarIndex number Index de l'avatar sélectionné
startIndex number Index de départ pour l'affichage des avatars
visibleAvatars string[] Sous-ensemble des avatars visibles
attributes Object Statistiques du personnage (vie, vitesse, attaque, défense)
isPopupActive boolean Contrôle l'affichage du popup d'erreur
isGameCancelledPopup boolean Contrôle l'affichage du popup d'annulation de partie
popupMessage string Message à afficher dans les popups
dice Object Configuration des dés (attaque, défense)
selectedGame Game Jeu sélectionné pour la partie
mode string Mode d'accès à la page ('create' ou 'join')
gameCode string Code de la partie (en mode 'join')
isGameLocked boolean Indique si la partie est verrouillée
onGoingGame OnGoingGame Objet représentant la partie en cours
takenAvatars string[] Liste des avatars déjà pris par d'autres joueurs
subscriptions Subscription[] Liste des souscriptions à nettoyer

Méthodes

constructor(formBuilder, router, route, gameService, gameCreationService, characterCreationService, waitingRoomService)

Description : Initialise le composant avec les services nécessaires et configure le formulaire.
Paramètres :

Détails : Configure les abonnements aux événements de verrouillage de partie, mise à jour de partie et annulation de partie.

ngOnInit()

Description : Initialise le composant au démarrage et traite les paramètres de route.
Retour : void
Détails : Détermine le mode (création ou participation) et le code de la partie, puis appelle handleJoinMode() si nécessaire.

handleJoinMode()

Description : Configure le composant pour rejoindre une partie existante.
Retour : void
Détails : Demande les informations de la partie et s'abonne aux mises à jour pour connaître les joueurs existants et leurs avatars.

fetchTakenAvatars()

Description : Récupère la liste des avatars déjà pris par d'autres joueurs.
Retour : void
Détails : Extrait les avatars des joueurs déjà présents dans la partie.

selectAvatar(index: number)

Description : Sélectionne un avatar dans la liste.
Paramètres : index: Index de l'avatar à sélectionner
Retour : void
Détails : Met à jour le formulaire avec l'avatar choisi.

nextAvatar()

Description : Affiche le groupe suivant d'avatars.
Retour : void
Détails : Incrémente l'indice de départ ou revient au début si nécessaire, puis met à jour les avatars visibles.

previousAvatar()

Description : Affiche le groupe précédent d'avatars.
Retour : void
Détails : Décrémente l'indice de départ ou va à la fin si nécessaire, puis met à jour les avatars visibles.

assignBonus(attribute: 'health' | 'speed')

Description : Attribue les points bonus à un attribut spécifique.
Paramètres : attribute: Attribut qui recevra le bonus ('health' ou 'speed')
Retour : void
Détails : Bascule entre activer et désactiver le bonus sur l'attribut spécifié.

assignDiceOption(choice: 'D4' | 'D6')

Description : Configure les dés pour l'attaque et la défense.
Paramètres : choice: Type de dé choisi pour l'attaque ('D4' ou 'D6')
Retour : void
Détails : Définit le type de dé pour l'attaque et utilise l'autre type pour la défense.

verifyName(): boolean

Description : Vérifie si le nom entré est valide et unique.
Retour : boolean - Vrai si le nom est valide
Détails : Vérifie que le nom n'est pas vide et n'est pas déjà pris par un autre joueur. Génère un nom unique si nécessaire.

verifyAvatar(): boolean

Description : Vérifie si un avatar a été sélectionné et est disponible.
Retour : boolean - Vrai si l'avatar est valide
Détails : Vérifie qu'un avatar est sélectionné et qu'il n'est pas déjà pris par un autre joueur.

verifyBonus(): boolean

Description : Vérifie si des points bonus ont été attribués.
Retour : boolean - Vrai si les bonus sont attribués
Détails : Vérifie qu'au moins un attribut a reçu des points bonus.

verifyDice(): boolean

Description : Vérifie si les dés ont été configurés.
Retour : boolean - Vrai si les dés sont configurés
Détails : Vérifie que les dés ne sont pas à leurs valeurs par défaut.

async verifyVisibility(): Promise<boolean>

Description : Vérifie si le jeu sélectionné est toujours visible.
Retour : Promise - Vrai si le jeu est visible
Détails : Utilise le service GameService pour vérifier la visibilité du jeu sur le serveur.

async verifyForm(): Promise<void>

Description : Vérifie l'ensemble du formulaire avant de créer le personnage.
Retour : Promise
Détails : Vérifie nom, avatar, bonus, dés et visibilité du jeu. Si tout est valide, appelle sendForm().

sendForm(): void

Description : Crée le personnage et démarre ou rejoint la partie.
Retour : void
Détails : Crée un objet Player, puis soit crée une nouvelle partie, soit rejoint une partie existante. Redirige vers la salle d'attente avec le mode approprié.

createPlayer(): Player

Description : Crée un objet Player à partir des informations du formulaire.
Retour : Player - Nouvel objet joueur
Détails : Extrait les données du formulaire et crée un objet Player avec les attributs appropriés.

closePopup(): void

Description : Ferme le popup d'erreur.
Retour : void

closeGameCancelledPopup(): void

Description : Ferme le popup de partie annulée et redirige vers l'accueil.
Retour : void
Détails : Ferme le popup et navigue vers la page d'accueil.

goToPreviousPage()

Description : Navigue vers la page précédente.
Retour : void
Détails : Détermine la page précédente en fonction du mode (création ou participation).

ngOnDestroy(): void

Description : Nettoie les abonnements lors de la destruction du composant.
Retour : void
Détails : Désinscrit tous les abonnements pour éviter les fuites mémoire.

updateVisibleAvatars(): void

Description : Met à jour la liste des avatars visibles.
Retour : void
Détails : Extrait un sous-ensemble des avatars en fonction de l'indice de départ.

Éléments HTML importants

Composants utilisés

OneButtonPopupComponent

Composant de popup simple avec un seul bouton, utilisé pour afficher des messages d'erreur.

Propriétés

Propriété Type Description
@Input() isPopupActive boolean Contrôle l'affichage du popup
@Input() popupMessage string Message à afficher
@Input() closePopup () => void Fonction de fermeture

Méthodes

onClose()

Description : Appelle la fonction de fermeture fournie.
Retour : void

Services utilisés

CharacterCreationService

Service responsable de la création de personnage et de la communication avec le serveur.

Méthodes

createGame(player: Player, game: Game): void

Description : Crée une nouvelle partie avec le joueur et le jeu spécifiés.
Paramètres :

Retour : void
Détails : Marque le joueur comme administrateur, crée une nouvelle partie et émet un événement au serveur.

onGameCreated(): Observable<OnGoingGame>

Description : Renvoie un Observable pour suivre la création de la partie.
Retour : Observable(OnGoingGame) - Observable sur la création de partie

joinWaitingRoom(player: Player): void

Description : Envoie une demande pour rejoindre une salle d'attente existante.
Paramètres : player: Joueur créé
Retour : void
Détails : Émet un événement au serveur pour rejoindre la salle d'attente.

GameCreationService

Service qui stocke et gère le jeu sélectionné pour la création de partie.

Méthodes

setSelectedGame(game: Game)

Description : Enregistre le jeu sélectionné.
Paramètres : game: Jeu sélectionné
Retour : void

getSelectedGame(): Game

Description : Récupère le jeu sélectionné.
Retour : Game - Jeu actuellement sélectionné

GameService

Service responsable de la communication avec le serveur pour toutes les opérations sur les jeux.

Méthodes

async getVisibleGames(): Promise<Game[]>

Description : Récupère tous les jeux visibles.
Retour : Promise<Game[]> - Liste des jeux visibles
Détails : Effectue une requête HTTP GET vers le serveur et filtre les résultats pour ne garder que les jeux visibles.

async getAllGames(): Promise<Game[]>

Description : Récupère tous les jeux (visibles et non visibles).
Retour : Promise<Game[]> - Liste complète des jeux
Détails : Effectue une requête HTTP GET vers le serveur sans filtrage.

async verifVisibility(gameName: string): Promise<boolean>

Description : Vérifie si un jeu est toujours visible.
Paramètres : gameName: Nom du jeu à vérifier
Retour : Promise(boolean) - Vrai si le jeu est visible
Détails : Communique avec le serveur via une requête HTTP GET.

async changeVisibility(name: string): Promise<void>

Description : Change l'état de visibilité d'un jeu (visible/non visible).
Paramètres : name: Nom du jeu à modifier
Retour : Promise(void)
Détails : Effectue une requête HTTP PATCH vers le serveur pour basculer la visibilité.

async deleteGame(name: string): Promise<void>

Description : Supprime un jeu de la base de données.
Paramètres : name: Nom du jeu à supprimer
Retour : Promise(void)
Détails : Effectue une requête HTTP DELETE vers le serveur.

async verifyGame(game: Game): Promise<string[]>

Description : Vérifie la validité d'un jeu.
Paramètres : game: Jeu à vérifier
Retour : Promise<string[]> - Liste des erreurs de validation
Détails : Envoie le jeu au serveur pour vérification et renvoie les raisons d'invalidité le cas échéant.

async onSave(game: Game)

Description : Sauvegarde un jeu sur le serveur.
Paramètres : game: Jeu à sauvegarder
Retour : Promise(void)
Détails : Effectue une requête HTTP PUT vers le serveur et redirige vers la page d'administration en cas de succès.

WaitingRoomService

Service qui gère la communication avec la salle d'attente et ses états.

Méthodes

onGameUpdated(): Observable<OnGoingGame>

Description : Observable qui émet lorsque la partie est mise à jour.
Retour : Observable(OnGoingGame) - Observable sur les mises à jour de partie
Détails : Écoute l'événement SocketIOEvents.GameUpdated.

requestGameUpdate(gameCode: string): void

Description : Demande une mise à jour des informations de la partie.
Paramètres : gameCode: Code de la partie
Retour : void
Détails : Envoie une demande au serveur pour obtenir les informations à jour.

onGameLockUpdated(): Observable<boolean>

Description : Observable qui émet lorsque l'état de verrouillage de la partie change.
Retour : Observable(boolean) - Observable sur l'état de verrouillage
Détails : Écoute l'événement SocketIOEvents.GameLockUpdated.

toggleGameLock(isLocked: boolean): void

Description : Change l'état de verrouillage de la partie.
Paramètres : isLocked: Nouvel état de verrouillage
Retour : void
Détails : Émet l'événement SocketIOEvents.ToggleGameLock au serveur.

leaveWaitingRoom(): void

Description : Quitte la salle d'attente.
Retour : void
Détails : Émet l'événement SocketIOEvents.LeaveWaitingRoom au serveur.

kickPlayer(nip: string, playerName: string): void

Description : Exclut un joueur de la salle d'attente.
Paramètres :

Retour : void
Détails : Émet l'événement SocketIOEvents.KickPlayer au serveur.

addVirtualPlayer(nip: string, playerType: string): void

Description : Ajoute un joueur virtuel à la partie.
Paramètres :

Retour : void
Détails : Émet l'événement SocketIOEvents.AddVirtualPlayer au serveur.

onPlayerKicked(): Observable<string>

Description : Observable qui émet lorsqu'un joueur est exclu.
Retour : Observable(string) - Observable avec le message d'exclusion
Détails : Écoute l'événement SocketIOEvents.Kicked.

onGameCancelled(): Observable<string>

Description : Observable qui émet lorsque la partie est annulée.
Retour : Observable(string) - Observable avec le message d'annulation
Détails : Écoute l'événement SocketIOEvents.GameCancelled.

startGame(gameCode: string): void

Description : Lance la partie.
Paramètres : gameCode: Code de la partie
Retour : void
Détails : Émet l'événement SocketIOEvents.StartGame au serveur.

onStartGame(): Observable<OnGoingGame>

Description : Observable qui émet lorsque la partie démarre.
Retour : Observable(OnGoingGame) - Observable sur le démarrage de partie
Détails : Écoute l'événement SocketIOEvents.StartGame.

onError(): Observable<string>

Description : Observable qui émet lorsqu'une erreur survient.
Retour : Observable(string) - Observable avec le message d'erreur
Détails : Écoute l'événement SocketIOEvents.Error.

getCurrentGame(): BehaviorSubject<OnGoingGame>

Description : Récupère la partie actuelle sous forme de BehaviorSubject.
Retour : BehaviorSubject(OnGoingGame) - BehaviorSubject sur la partie actuelle
Détails : Utilise la partie stockée dans le service SocketService.

setCurrentGame(game: OnGoingGame): void

Description : Définit la partie actuelle.
Paramètres : game: Partie à définir
Retour : void
Détails : Stocke la partie dans le service SocketService.

getCurrentPlayer(): BehaviorSubject<Player>

Description : Récupère le joueur actuel sous forme de BehaviorSubject.
Retour : BehaviorSubject(Player) - BehaviorSubject sur le joueur actuel
Détails : Utilise le joueur stocké dans le service SocketService.

setCurrentPlayer(player: Player): void

Description : Définit le joueur actuel.
Paramètres : player: Joueur à définir
Retour : void
Détails : Stocke le joueur dans le service SocketService.

updatePlayer(): void

Description : Met à jour les informations du joueur actuel.
Retour : void
Détails : Recherche le joueur dans la liste des joueurs de la partie et met à jour les informations.

disconnect(): void

Description : Déconnecte du serveur socket.
Retour : void
Détails : Appelle la méthode disconnect du service SocketService.

Communication avec le Serveur

La communication avec le serveur se fait principalement via les services suivants :

  1. CharacterCreationService :
    • Émission de SocketIOEvents.CreateGame pour créer une nouvelle partie
    • Écoute de SocketIOEvents.GameCreated pour recevoir la confirmation de création
    • Émission de SocketIOEvents.JoinWaitingRoom pour rejoindre une partie existante
  2. WaitingRoomService :
    • Émission de SocketIOEvents.RequestGameUpdate pour demander des mises à jour
    • Écoute de SocketIOEvents.GameUpdated pour recevoir les mises à jour de la partie
    • Écoute de SocketIOEvents.GameLockUpdated pour suivre l'état de verrouillage
    • Écoute de SocketIOEvents.GameCancelled pour détecter l'annulation de la partie
  3. GameService :
    • Requête HTTP GET à /game-manager/visibility/:name pour vérifier la visibilité d'un jeu

Navigation

La page de Création de Personnage peut rediriger vers :

  1. Page d'Accueil (MainPageComponent) - En cas d'annulation de partie ou en cliquant sur "RETOUR" en mode "join"
  2. Page de Sélection de Jeu (GameCreationPageComponent) - En cliquant sur "RETOUR" en mode "create"
  3. Salle d'Attente (WaitingRoomPageComponent) - Après avoir créé un personnage avec succès, avec les paramètres de mode appropriés ("create" ou "join")