Lorsque le joueur crée ou rejoint une partie, il a la possibilité d’annuler son action en cliquant sur le bouton « Quitter la partie », cela va se traduire par le déclenchement de l’événement event_quit_partie.
Lorsque le joueur crée ou rejoint une partie, il a la possibilité d’annuler son action en cliquant sur le bouton « Quitter la partie », cela va se traduire par le déclenchement de l’événement event_quit_partie.
event_quit_partie(){
if( this.current_partie ){
this.send_to_server("message",{ action : "request_quit_partie" , params : { token : this.token , partie_id : this.current_partie } });
//unbind de click
$(".sub-menu").off("click.quit_partie");
}
}
Au niveau du serveur, je crée la méthode request_quit_partie. Je vérifie que le joueur fait bien partie de la partie et qu’il est bien en état de la quitter, ensuite je le supprime de la partie et je réinitialise le tableau de validation. Si la partie ne contient plus aucun joueur, alors je supprime la partie, sinon j’avertis tous les autres joueurs qu’un des joueurs vient de quitter la partie. Et si il y a eu la moindre action, alors je mets à jour les parties pour les utilisateurs en état « free« .
request_quit_partie(user_socket, params){
if( ( this.users[ params.token ].state == "join" || this.users[ params.token ].state == "valide" || this.users[ params.token ].state == "making" ) && this.users[ params.token ].current_partie == params.partie_id){
//supression du joueurs
delete this.parties[ params.partie_id ].list_players[ params.token ];
//definis tous les joueurs de la partie comme non valide
this.parties[ params.partie_id ].validation_players = {};
//variable client
this.users[ params.token ].current_partie = null;
this.users[ params.token ].state = "free";
//si un jour quitte la partie la map repasse en waiting automatiquement
this.parties[ params.partie_id ].state = "waiting";
//si la partie ne contient plus de joueur alors la supprimer
if( Object.keys( this.parties[ params.partie_id ].list_players ).length == 0){
delete this.parties[ params.partie_id ];
}else{
//envois un message au autre utilisateur de la partie pour rafraichir le nombre
for(let token in this.parties[ params.partie_id ].list_players ){
//envois à tous sauf à l'user
if( user_socket.id != this.users[ token ].socket_id ){
this.send_to_specific_client(this.users[token].socket_id, "message", {
action : "update_request_join_partie",
params : this.get_list_players_for_preparation( this.parties[ params.partie_id ] )
});
}
}
}
//mettre à jour les parties pour les utilisateurs free
for(let token in this.users){
if( token == params.token){
//utilisateur courant
this.send_to_client(user_socket, "message", { action : "response_request_quit_partie", params : { go_to : "home" , list_parties : this.get_client_list_parties() } });
}else if( this.users[ token ].state == "free" ){
//utilisateur free
this.send_to_specific_client(this.users[token].socket_id, "message", { action : "update_list_parties", params : this.get_client_list_parties() });
}
}
}
}
Voilà une première partie fonctionnelle, et je suis assez content du résultat. Maintenant je peux te présenter une vidéo qui montre le fonctionnement de l’interface et comment tout cela se goupille !
09/07/2016