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 :
formBuilder
: Service de création de formulairesrouter
: Service de navigationroute
: Service d'accès aux paramètres de routegameService
: Service de gestion des jeuxgameCreationService
: Service de création de partiecharacterCreationService
: Service de création de personnagewaitingRoomService
: Service de gestion de la salle d'attente
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
- Formulaire : Formulaire réactif pour les informations du personnage
- Section Nom : Champ texte pour le nom du personnage
- Section Avatar : Carrousel d'avatars avec navigation
- Section Attributs : Affichage des attributs avec possibilité d'attribuer des bonus
- Section Dés : Options pour configurer les dés d'attaque et de défense
- Boutons d'action : "RETOUR" et "CRÉER MON PERSONNAGE"
- Popups : Affichage des messages d'erreur et annulation de partie
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 :
player
: Joueur créégame
: Jeu sélectionné
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 :
nip
: Code de la partieplayerName
: Nom du joueur à exclure
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 :
nip
: Code de la partieplayerType
: Type de joueur virtuel à ajouter
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 :
- 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
- Émission de
- 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
- Émission de
- GameService :
- Requête HTTP GET à
/game-manager/visibility/:name
pour vérifier la visibilité d'un jeu
- Requête HTTP GET à
Navigation
La page de Création de Personnage peut rediriger vers :
- Page d'Accueil (
MainPageComponent
) - En cas d'annulation de partie ou en cliquant sur "RETOUR" en mode "join" - Page de Sélection de Jeu (
GameCreationPageComponent
) - En cliquant sur "RETOUR" en mode "create" - Salle d'Attente (
WaitingRoomPageComponent
) - Après avoir créé un personnage avec succès, avec les paramètres de mode appropriés ("create" ou "join")