TODO: GameStorage.update + clocks started...
authorBenjamin Auder <benjamin.auder@somewhere>
Wed, 5 Jun 2019 09:56:03 +0000 (11:56 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Wed, 5 Jun 2019 09:56:03 +0000 (11:56 +0200)
client/src/components/BaseGame.vue
client/src/utils/storage.js
client/src/views/Game.vue

index e8ca696..5ee5e0c 100644 (file)
@@ -145,7 +145,7 @@ export default {
     endGame: function(score) {
       this.score = score;
       this.showScoreMsg(score);
-      this.$emit("gameover"); //score not required (TODO?)
+      this.$emit("gameover", score);
     },
     animateMove: function(move) {
       let startSquare = document.getElementById(getSquareId(move.start));
index 48435b5..8a7c526 100644 (file)
@@ -110,12 +110,12 @@ export const GameStorage =
   // localStorage:
   // TODO: also option to takeback a move ? Is fen included in move ?
   // NOTE: for live games only (all on server for corr)
-  update: function(fen, moves, clocks, started, score)
+  update: function(fen, move, clocks, started, score)
   {
     let gameState = JSON.parse(localStorage.getItem("gameState"));
     if (!!fen)
     {
-      gameState.moves = moves;
+      gameState.moves.push(move);
       gameState.fen = fen;
       gameState.clocks = clocks;
     }
index dd04b86..13dc486 100644 (file)
@@ -16,7 +16,8 @@ pareil quand quelqu'un reco.
 <template lang="pug">
 .row
   .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
-    BaseGame(:game="game" :vr="vr" ref="basegame" @newmove="processMove")
+    BaseGame(:game="game" :vr="vr" ref="basegame"
+      @newmove="processMove" @gameover="gameOver")
     .button-group(v-if="game.mode!='analyze'")
       button(@click="offerDraw") Draw
       button(@click="abortGame") Abort
@@ -81,6 +82,7 @@ export default {
 
     // --> doivent être enregistrés comme observers au niveau du serveur...
     // non: poll users + events startObserving / stopObserving
+    // (à faire au niveau du routeur ?)
 
 
     // TODO: also handle "draw accepted" (use opponents array?)
@@ -238,7 +240,8 @@ export default {
         this.game = Object.assign({},
           game,
           // NOTE: assign mycolor here, since BaseGame could also bs VS computer
-          {mycolor: ["w","b"][game.players.findIndex(p => p.sid == this.st.user.sid)]},
+          {mycolor: [undefined,"w","b"][1 + game.players.findIndex(
+            p => p.sid == this.st.user.sid)]},
         );
         const vModule = await import("@/variants/" + game.vname + ".js");
         window.V = vModule.VariantRules;
@@ -254,14 +257,29 @@ export default {
 //      });
 //    }
     },
+    // TODO: refactor this old "oppConnected" logic
     oppConnected: function(uid) {
       return this.opponents.some(o => o.id == uid && o.online);
     },
     processMove: function(move) {
-      // TODO: process some opponent's move
-      
-      // update storage (corr or live), send move to opponent (if ours) /
-      // notify BaseGame if opponents move (how ?) --> need a game.newmove field ?
+      if (!this.game.mycolor)
+        return; //I'm just an observer
+      // TODO: update storage (corr or live),
+      GameStorage.update({
+        fen: move: clocks: ................ // TODO
+      });
+      // Send move ("newmove" event) to opponent(s) (if ours)
+      if (move.disappear[0].c == this.game.mycolor)
+      {
+        this.game.players.forEach(p => {
+          if (p.sid != this.st.user.sid)
+            this.st.conn.send("newmove", {target:p.sid, move:move});
+        });
+      }
+    },
+    gameOver: function(score) {
+      // TODO: GameStorage.update with score
+      // NOTE: this update function should also work for corr games
     },
   },
 };