Get rid of livereload dependency. Draft Baroque (still some issues)
[xogo.git] / variants / Bario / class.js
index 6a44834..01cb3d7 100644 (file)
@@ -6,7 +6,8 @@ export default class BarioRules extends ChessRules {
 
   static get Options() {
     return {
-      // TODO: Zen too?
+      select: C.Options.select,
+      input: C.Options.input,
       styles: [
         "atomic", "cannibal", "capture", "cylinder",
         "dark", "madrasi", "rifle", "teleport"
@@ -113,6 +114,8 @@ export default class BarioRules extends ChessRules {
       case 0:
         if (typeof x == "string")
           moves = this.getDropMovesFrom([x, y]);
+        // Empty move: just start + end
+        moves.forEach(m => {m.vanish.pop(); m.appear.pop();});
         break;
       case 1:
         // Both normal move (from defined piece) and definition allowed
@@ -200,8 +203,9 @@ export default class BarioRules extends ChessRules {
 
   postPlay(move) {
     const color = this.turn;
-    if (this.movesCount <= 1 || move.reset) {
-      this.tryChangeTurn();
+    if (this.movesCount <= 1 || move.reset || move.next) {
+      if (!move.next)
+        this.tryChangeTurn();
       return;
     }
     if (this.subTurn == 0)
@@ -216,7 +220,7 @@ export default class BarioRules extends ChessRules {
       super.postPlay(move);
     else if (typeof move.start.x == "string") {
       super.updateReserve(
-        color, move.appear[0].p, this.reserve[color][move.appear[0].p] - 1);
+        color, move.start.y, this.reserve[color][move.start.y] - 1);
       if (move.vanish.length == 1 && move.vanish[0].p == 'u')
         this.definition = move.end;
       this.subTurn++;
@@ -224,11 +228,11 @@ export default class BarioRules extends ChessRules {
     else {
       this.subTurn = 0;
       this.captureUndef = move.end;
-      this.tryChangeTurn(move, captureUndef);
+      this.tryChangeTurn(null, captureUndef);
     }
   }
 
-  // NOTE: not "try" here, we know the turn changes (TODO?)
+  // NOTE: not "trying", the turn always change here (TODO?)
   tryChangeTurn(move, captureUndef) {
     this.definition = null;
     this.subTurn = captureUndef ? 0 : 1;
@@ -242,7 +246,7 @@ export default class BarioRules extends ChessRules {
       this.board.some(row => row.some(cell =>
         cell.charAt(0) == this.turn && cell.charAt(1) == 'u'))
     ) {
-      return null;
+      return;
     }
     const variety = (c) => {
       return (
@@ -257,26 +261,29 @@ export default class BarioRules extends ChessRules {
         )].length >= 2
       );
     };
-    this.playOnBoard(move);
     let next = {start: move.end, end: move.end, vanish: [], appear: []};
-    for (let c of ['w', 'b']) {
-      if (variety(c)) {
-        for (let i=0; i<this.size.x; i++) {
-          for (let j=0; j<this.size.y; j++) {
-            const pieceIJ = this.getPiece(i, j);
-            if (
-              this.board[i][j] != "" &&
-              !['p', 'k', 'u'].includes(pieceIJ)
-            ) {
-              // NOTE: could also use a "flip" strategy similar to Benedict
-              next.vanish.push(new PiPo({c: c, p: pieceIJ, x: i, y: j}));
-              next.appear.push(new PiPo({c: c, p: 'u', x: i, y: j}));
-              this.reserve[c][pieceIJ]++;
-            }
+    this.playOnBoard(move);
+    const twoOrMorePieces = {w: variety('w'), b: variety('b')};
+    const resetCols =
+      Object.keys(twoOrMorePieces).filter(k => twoOrMorePieces[k]);
+    if (resetCols.length >= 1) {
+      for (let i=0; i<this.size.x; i++) {
+        for (let j=0; j<this.size.y; j++) {
+          const colIJ = this.getColor(i, j);
+          const pieceIJ = this.getPiece(i, j);
+          if (
+            resetCols.includes(colIJ) &&
+            this.board[i][j] != "" &&
+            !['p', 'k', 'u'].includes(pieceIJ)
+          ) {
+            // NOTE: could also use a "flip" strategy similar to Benedict
+            next.vanish.push(new PiPo({c: colIJ, p: pieceIJ, x: i, y: j}));
+            next.appear.push(new PiPo({c: colIJ, p: 'u', x: i, y: j}));
+            this.reserve[colIJ][pieceIJ]++;
           }
         }
-        super.re_drawReserve([c]);
       }
+      super.re_drawReserve(resetCols);
     }
     this.undoOnBoard(move);
     if (next.vanish.length >= 1) {