Hopefully Eightpieces is less buggish now
[vchess.git] / client / src / variants / Suction.js
index 38ee5c2..a39bec0 100644 (file)
@@ -1,11 +1,15 @@
 import { ChessRules, PiPo, Move } from "@/base_rules";
 
 export const VariantRules = class SuctionRules extends ChessRules {
+  static get HasFlags() {
+    return false;
+  }
+
   setOtherVariables(fen) {
     super.setOtherVariables(fen);
-    // Local stack of captures
+    // Local stack of "captures"
     this.cmoves = [];
-    const cmove = fen.split(" ")[5];
+    const cmove = V.ParseFen(fen).cmove;
     if (cmove == "-") this.cmoves.push(null);
     else {
       this.cmoves.push({
@@ -15,6 +19,12 @@ export const VariantRules = class SuctionRules extends ChessRules {
     }
   }
 
+  static ParseFen(fen) {
+    return Object.assign({}, ChessRules.ParseFen(fen), {
+      cmove: fen.split(" ")[4]
+    });
+  }
+
   static IsGoodFen(fen) {
     if (!ChessRules.IsGoodFen(fen)) return false;
     const fenParts = fen.split(" ");
@@ -171,27 +181,9 @@ export const VariantRules = class SuctionRules extends ChessRules {
     });
   }
 
-  updateVariables(move) {
-    super.updateVariables(move);
-    if (move.vanish.length == 2) {
-      // Was opponent king swapped?
-      if (move.vanish[1].p == V.KING)
-        this.kingPos[this.turn] = [move.appear[1].x, move.appear[1].y];
-    }
-  }
-
-  unupdateVariables(move) {
-    super.unupdateVariables(move);
-    if (move.appear.length == 2) {
-      // Was opponent king swapped?
-      if (move.appear[1].p == V.KING)
-        this.kingPos[move.vanish[1].c] = [move.vanish[1].x,move.vanish[1].y];
-    }
-  }
-
-  static GenRandInitFen() {
+  static GenRandInitFen(randomness) {
     // Add empty cmove:
-    return ChessRules.GenRandInitFen() + " -";
+    return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "- -";
   }
 
   getFen() {
@@ -203,14 +195,23 @@ export const VariantRules = class SuctionRules extends ChessRules {
     return super.getFen() + " " + cmoveFen;
   }
 
-  play(move) {
+  postPlay(move) {
+    super.postPlay(move);
+    if (move.vanish.length == 2) {
+      // Was opponent king swapped?
+      if (move.vanish[1].p == V.KING)
+        this.kingPos[this.turn] = [move.appear[1].x, move.appear[1].y];
+    }
     this.cmoves.push(this.getCmove(move));
-    super.play(move);
   }
 
-  undo(move) {
+  postUndo(move) {
+    super.postUndo(move);
+    if (move.appear.length == 2) {
+      if (move.appear[1].p == V.KING)
+        this.kingPos[move.vanish[1].c] = [move.vanish[1].x, move.vanish[1].y];
+    }
     this.cmoves.pop();
-    super.undo(move);
   }
 
   atLeastOneMove() {
@@ -236,4 +237,28 @@ export const VariantRules = class SuctionRules extends ChessRules {
     // Very simple criterion for now: kings position
     return this.kingPos["w"][0] + this.kingPos["b"][0];
   }
+
+  getNotation(move) {
+    // Translate final square
+    const finalSquare = V.CoordsToSquare(move.end);
+
+    const piece = this.getPiece(move.start.x, move.start.y);
+    if (piece == V.PAWN) {
+      // Pawn move
+      let notation = "";
+      if (move.vanish.length == 2) {
+        // Capture
+        const startColumn = V.CoordToColumn(move.start.y);
+        notation = startColumn + "x" + finalSquare;
+      }
+      else notation = finalSquare;
+      return notation;
+    }
+    // Piece movement
+    return (
+      piece.toUpperCase() +
+      (move.vanish.length == 2 ? "x" : "") +
+      finalSquare
+    );
+  }
 };