Client: always set the rack when the rack was changed
authorRaphaël Jakse <raphael.trivabble@jakse.fr>
Fri, 1 May 2020 17:20:03 +0000 (19:20 +0200)
committerRaphaël Jakse <raphael.trivabble@jakse.fr>
Fri, 1 May 2020 17:20:03 +0000 (19:20 +0200)
trivabble.js

index 3a75fc760ef23ed01d53b7f9d6eb8e29f4c9c9a8..c1d71c621238ddaa04e5ce7194538ccc250912a3 100644 (file)
     let boardBCR            = null;
     let bagBCR              = null;
     let moveCMD             = null;
+    let rackChanged         = false;
 
     function getLetter(l) {
         const tile = l.getElementsByClassName("tile")[0];
             };
 
             if (moveCMD.to === moveCMD.from) {
-                if (moveCMD.indexTo !== moveCMD.indexFrom) {
-                    sendCmds([
-                        (moveCMD.from === "rack")
-                            ? moveRack
-                            : moveCMD
-                    ]);
+                if (moveCMD.indexTo === moveCMD.indexFrom) {
+                    if (rackChanged) {
+                        sendCmds([moveRack]);
+                    }
+                } else if (moveCMD.from === "rack") {
+                    sendCmds([moveRack]);
+                } else if (rackChanged) {
+                    sendCmds([moveCMD, moveRack]);
+                } else {
+                    sendCmds([moveCMD]);
                 }
             } else if (moveCMD.to === "rack") {
                 moveRack.rack[moveCMD.indexTo] = "";
                 sendCmds([moveRack, moveCMD]);
             } else {
-                // setting the rack is not necessary in most cases, but the
-                // player could have moved some letters of the rack when moving
-                // a tile to the board so let's set the rack in any case
-                // FIXME this could be improved
-                sendCmds([moveCMD, moveRack]);
+                if (rackChanged) {
+                    sendCmds([moveCMD, moveRack]);
+                } else {
+                    sendCmds([moveCMD]);
+                }
             }
         }
 
                     if (!tile) {
                         let j = i;
                         while (j > index) {
+                            rackChanged = true;
                             playerLetters[j].appendChild(
                                 playerLetters[j - 1].getElementsByClassName("tile")[0]
                             );
 
         loadAudio();
 
+        rackChanged = false;
         movingTile = e.currentTarget;
 
         tileInitMouseCoords = e;