Current state - TODO: pawnfall fix, better pre/postPlay()
[xogo.git] / base_rules.js
index 2d95f6c..8ad54a4 100644 (file)
@@ -1347,6 +1347,8 @@ export default class ChessRules {
     });
   }
 
+// TODO: pawnfall + Cannibal issues
+
   pawnPostProcess(moves, color, oppCol) {
     let moreMoves = [];
     const lastRank = (color == "w" ? 0 : this.size.x - 1);
@@ -1361,7 +1363,12 @@ export default class ChessRules {
       );
       if (!promotionOk)
         return; //nothing to do
-      if (!this.options["pawnfall"]) {
+      if (this.options["pawnfall"]) {
+        m.appear.shift();
+        m.pawnfall = true; //required in prePlay() /// ????????????
+        return;
+      }
+      //if (!this.options["pawnfall"]) { --> OK
         if (
           this.options["cannibal"] &&
           this.board[x2][y2] != "" &&
@@ -1371,7 +1378,7 @@ export default class ChessRules {
         }
         else
           finalPieces = this.pawnPromotions;
-      }
+      //}
       m.appear[0].p = finalPieces[0];
       if (initPiece == "!") //cannibal king-pawn
         m.appear[0].p = C.CannibalKingCode[finalPieces[0]];
@@ -1386,8 +1393,6 @@ export default class ChessRules {
         }
         let newMove = this.getBasicMove([x1, y1], [x2, y2], tr);
         if (this.options["pawnfall"]) {
-          newMove.appear.shift();
-          newMove.pawnfall = true; //required in prePlay()
         }
         moreMoves.push(newMove);
       }
@@ -1946,6 +1951,11 @@ export default class ChessRules {
     });
   }
 
+
+// TODO: englober + de cas ici...
+    // + generique start/end board or reserve
+    // + bien séparer les options... ?
+
   prePlay(move) {
     if (
       typeof move.start.x == "number" &&
@@ -2154,6 +2164,10 @@ export default class ChessRules {
       return;
     }
     let movingPiece = this.getDomPiece(move.start.x, move.start.y);
+    if (!movingPiece) { //TODO this shouldn't be required
+      callback();
+      return;
+    }
     const initTransform = movingPiece.style.transform;
     let chessboard =
       document.getElementById(this.containerId).querySelector(".chessboard");
@@ -2180,18 +2194,10 @@ export default class ChessRules {
       const [i2, j2] = move.segments[index][1];
       const dep = this.getPixelPosition(i1, j1, r);
       const arr = this.getPixelPosition(i2, j2, r);
-
-console.log(dep,arr); //TODO: this seems right, but translations don't work well.
-
-      // Start from i1, j1:
-      movingPiece.style.transform =
-        `translate(${dep[0] - ix}px, ${dep[1] - iy}px)`;
-      movingPiece.style.transitionDuration = "0s";
       const distance =
         Math.sqrt((arr[0] - dep[0]) ** 2 + (arr[1] - dep[1]) ** 2);
       const duration = 0.2 + (distance / maxDist) * 0.3;
-      movingPiece.style.transform =
-        `translate(${arr[0] - dep[0]}px, ${arr[1] - dep[1]}px)`;
+      movingPiece.style.transform = `translate(${arr[0]}px, ${arr[1]}px)`;
       movingPiece.style.transitionDuration = duration + "s";
       setTimeout(cb, duration * 1000);
     };