Tutoriel: propager les actions joueurs #
-
Créer le message
MsgActionAutreJoueur
public class MsgActionAutreJoueur extends Message<MsgActionAutreJoueur> { private Position position; private Action action; public MsgActionAutreJoueur setPosition(Position position) { this.position = position; return this; } public MsgActionAutreJoueur setAction(Action action) { this.action = action; return this; } public MsgActionAutreJoueur() { } public void appliquerA(DonneesVuePartie donneesVuePartie) { donneesVuePartie.appliquerActionJoueur(position, action); } }
-
Déclarer le message dans
Declarations
public class Declarations { // ... public static void declarerMessages(MessageRegistrar registrar) { // ... // ajouter registrar.registerMessage(MsgActionAutreJoueur.class); }
-
Dans
AfficherPartie
, ajouter ce codepublic class AfficherPartie { //... private static void reagirActionJoueur(FrontendTasks subTasks) { subTasks.task("reagirActionJoueur") // ... // s'assurer d'avoir .waitsFor(EvtActionJoueur.class) .executes(inputs -> { // ... // s'assurer d'avoir EvtActionJoueur evtActionJoueur = inputs.get(EvtActionJoueur.class); // ... // ajouter evtActionJoueur.diffuserMsgActionAutreJoueur(); }); }
-
Créer la méthode
EvtActionJoueur.diffuserMsgActionAutreJoueur
public class EvtActionJoueur extends Event { // ... // ajouter public void diffuserMsgActionAutreJoueur() { Ntro.newMessage(MsgActionAutreJoueur.class) .setPosition(position) .setAction(action) .broadcast(); } }
-
Dans
AfficherPartie
, ajouter ce codepublic class AfficherPartie { public static void creerTaches(FrontendTasks tasks) { creerDonneesVuePartie(tasks); tasks.taskGroup("AfficherPartie") .waitsFor(created(DonneesVuePartie.class)) .contains(subTasks -> { // ... // ajouter reagirActionAutreJoueur(subTasks); }); } // ... private static void reagirActionAutreJoueur(FrontendTasks subTasks) { subTasks.task("reagirActionAutreJoueur") .waitsFor(created(DonneesVuePartie.class)) .waitsFor(message(MsgActionAutreJoueur.class)) .executes(inputs -> { DonneesVuePartie donneesVuePartie = inputs.get(created(DonneesVuePartie.class)); MsgActionAutreJoueur msgActionAutreJoueur = inputs.get(message(MsgActionAutreJoueur.class)); msgActionAutreJoueur.appliquerA(donneesVuePartie); }); }
-
Vérifier que ça fonctionne
$ sh gradlew pong:serveur $ sh gradlew pong:clientAlice $ sh gradlew pong:clientBob