From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sun, 31 Jan 2021 20:18:13 +0000 (+0100)
Subject: Fix Bario checkmate by capturing an undefined piece
X-Git-Url: https://git.auder.net/%7B%7B%20asset%28%27mixstore/images/assets/current/doc/%7B%7B%20pkg.url%20%7D%7D?a=commitdiff_plain;h=16175fb33c3350fdae3551f7c9b4f1b3d122179c;p=vchess.git

Fix Bario checkmate by capturing an undefined piece
---

diff --git a/client/src/variants/Bario.js b/client/src/variants/Bario.js
index f344d3a2..e10bb3d4 100644
--- a/client/src/variants/Bario.js
+++ b/client/src/variants/Bario.js
@@ -295,7 +295,13 @@ export class BarioRules extends ChessRules {
     if (this.movesCount <= 1) return moves;
     const color = this.turn;
     return moves.filter(m => {
-      if (m.vanish.length == 0) return true;
+      if (m.vanish.length == 0) {
+        // subTurn == 0: need to check if a move exists at subTurn == 1
+        this.play(m);
+        const res = this.filterValid(this.getAllPotentialMoves()).length > 0;
+        this.undo(m);
+        return res;
+      }
       const start = { x: m.vanish[0].x, y: m.vanish[0].y };
       const end = { x: m.appear[0].x, y: m.appear[0].y };
       if (start.x == end.x && start.y == end.y) {
@@ -330,9 +336,10 @@ export class BarioRules extends ChessRules {
       }
       return false;
     };
-    if (this.subTurn == 0) return true; //always one reserve for an undefined
-    if (!super.atLeastOneMove()) return atLeastOneReserveMove();
-    return true;
+    if (this.subTurn == 0) return atLeastOneReserveMove();
+    const canMoveSomething = super.atLeastOneMove();
+    if (this.subTurn == 2) return canMoveSomething;
+    return (canMoveSomething || atLeastOneReserveMove());
   }
 
   underCheck(color) {