Several small improvements + integrate options + first working draft of Cwda
[vchess.git] / client / src / variants / Fanorona.js
index 04eea2c..e1e653a 100644 (file)
@@ -3,6 +3,10 @@ import { randInt } from "@/utils/alea";
 
 export class FanoronaRules extends ChessRules {
 
+  static get Options() {
+    return null;
+  }
+
   static get HasFlags() {
     return false;
   }
@@ -80,13 +84,14 @@ export class FanoronaRules extends ChessRules {
     return "Fanorona/" + b;
   }
 
-  getPPpath(m) {
+  getPPpath(m, orientation) {
     // m.vanish.length >= 2, first capture gives direction
     const ref = (Math.abs(m.vanish[1].x - m.start.x) == 1 ? m.start : m.end);
     const step = [m.vanish[1].x - ref.x, m.vanish[1].y - ref.y];
+    const multStep = (orientation == 'w' ? 1 : -1);
     const normalizedStep = [
-      step[0] / Math.abs(step[0]),
-      step[1] / Math.abs(step[1])
+      multStep * step[0] / Math.abs(step[0]),
+      multStep * step[1] / Math.abs(step[1])
     ];
     return (
       "Fanorona/arrow_" +
@@ -246,18 +251,16 @@ export class FanoronaRules extends ChessRules {
     const color = this.turn;
     move.turn = color; //for undo
     V.PlayOnBoard(this.board, move);
-    const L0 = this.captures.length;
-    let captures = this.captures[L0 - 1];
     if (move.vanish.length >= 2) {
+      const L0 = this.captures.length;
+      let captures = this.captures[L0 - 1];
       captures.push({
         square: move.start,
         step: [move.end.x - move.start.x, move.end.y - move.start.y]
       });
       if (this.atLeastOneCapture())
         // There could be other captures (optional)
-        // This field is mostly useful for computer play.
         move.notTheEnd = true;
-      else captures.pop(); //useless now
     }
     if (!move.notTheEnd) {
       this.turn = V.GetOppCol(color);
@@ -268,12 +271,12 @@ export class FanoronaRules extends ChessRules {
 
   undo(move) {
     V.UndoOnBoard(this.board, move);
-    if (move.turn != this.turn) {
+    if (!move.notTheEnd) {
       this.turn = move.turn;
       this.movesCount--;
       this.captures.pop();
     }
-    else {
+    if (move.vanish.length >= 2) {
       const L0 = this.captures.length;
       let captures = this.captures[L0 - 1];
       captures.pop();