Several small improvements + integrate options + first working draft of Cwda
[vchess.git] / client / src / variants / Makruk.js
index 6205f23..b721273 100644 (file)
@@ -3,6 +3,7 @@ import { ArrayFun } from "@/utils/array";
 import { randInt, shuffle } from "@/utils/alea";
 
 export class MakrukRules extends ChessRules {
+
   static get HasFlags() {
     return false;
   }
@@ -15,6 +16,10 @@ export class MakrukRules extends ChessRules {
     return true;
   }
 
+  static get Notoodark() {
+    return true;
+  }
+
   static get PawnSpecs() {
     return Object.assign(
       {},
@@ -31,13 +36,13 @@ export class MakrukRules extends ChessRules {
     return 'f';
   }
 
-  static GenRandInitFen(randomness) {
-    if (randomness == 0)
+  static GenRandInitFen(options) {
+    if (options.randomness == 0)
       return "rnbqkbnr/8/pppppppp/8/8/PPPPPPPP/8/RNBKQBNR w 0";
 
     let pieces = { w: new Array(8), b: new Array(8) };
     for (let c of ["w", "b"]) {
-      if (c == 'b' && randomness == 1) {
+      if (c == 'b' && options.randomness == 1) {
         pieces['b'] = pieces['w'];
         break;
       }
@@ -90,39 +95,33 @@ export class MakrukRules extends ChessRules {
   getPotentialBishopMoves(sq) {
     const forward = (this.turn == 'w' ? -1 : 1);
     return this.getSlideNJumpMoves(
-      sq,
-      V.steps[V.BISHOP].concat([ [forward, 0] ]),
-      "oneStep"
-    );
+      sq, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
   }
 
   getPotentialQueenMoves(sq) {
-    return this.getSlideNJumpMoves(
-      sq,
-      V.steps[V.BISHOP],
-      "oneStep"
+    return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
+  }
+
+  isAttacked(sq, color) {
+    return (
+      super.isAttacked(sq, color) || this.isAttackedByPromoted(sq, color)
     );
   }
 
   isAttackedByBishop(sq, color) {
     const forward = (color == 'w' ? 1 : -1);
     return this.isAttackedBySlideNJump(
-      sq,
-      color,
-      V.BISHOP,
-      V.steps[V.BISHOP].concat([ [forward, 0] ]),
-      "oneStep"
-    );
+      sq, color, V.BISHOP, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
   }
 
   isAttackedByQueen(sq, color) {
     return this.isAttackedBySlideNJump(
-      sq,
-      color,
-      V.QUEEN,
-      V.steps[V.BISHOP],
-      "oneStep"
-    );
+      sq, color, V.QUEEN, V.steps[V.BISHOP], 1);
+  }
+
+  isAttackedByPromoted(sq, color) {
+    return super.isAttackedBySlideNJump(
+      sq, color, V.PROMOTED, V.steps[V.BISHOP], 1);
   }
 
   static get VALUES() {
@@ -136,4 +135,5 @@ export class MakrukRules extends ChessRules {
       k: 1000
     };
   }
+
 };