Monochrome: remove duplicate capturing moves
authorBenjamin Auder <benjamin.auder@somewhere>
Fri, 5 Jun 2020 20:28:57 +0000 (22:28 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Fri, 5 Jun 2020 20:28:57 +0000 (22:28 +0200)
client/src/variants/Monochrome.js

index ba56c69..50ca04b 100644 (file)
@@ -105,7 +105,21 @@ export class MonochromeRules extends ChessRules {
   }
 
   getPotentialMovesFrom(sq) {
-    return super.getPotentialMovesFrom(sq).concat(this.findCaptures(sq));
+    const moves = super.getPotentialMovesFrom(sq);
+    const zenCaptures = this.findCaptures(sq);
+    // Remove duplicate captures in a lazy way (TODO: more efficient...)
+    let hashMoves = {};
+    moves.forEach(m => {
+      if (m.vanish.length == 2) {
+        const hash =
+          m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
+        hashMoves[hash] = true;
+      }
+    }
+    return moves.concat(zenCaptures.filter(m => {
+      const hash = m.start.x + "." + m.start.y + "." + m.end.x + "." + m.end.y;
+      return !hashMoves[hash];
+    });
   }
 
   getAllPotentialMoves() {