Finalize Shinobi Chess
[vchess.git] / client / src / components / Board.vue
index 9e23fc5..799185e 100644 (file)
@@ -299,7 +299,8 @@ export default {
         (!myReserveTop && !!this.vr.reserve[playingColor])
       );
       // Center reserves, assuming same number of pieces for each side:
-      const nbReservePieces = myReservePiecesArray.length;
+      const nbReservePieces =
+        Math.max(myReservePiecesArray.length, oppReservePiecesArray.length);
       const marginLeft =
         ((100 - nbReservePieces * (100 / reserveSquareNb)) / 2) + "%";
       if (hasReserveTop) {
@@ -546,15 +547,20 @@ export default {
       }
     },
     addArrow: function(arrow) {
-      this.arrows.push(arrow);
-      // Also add to DOM:
-      const boardElt = document.getElementById("gamePosition");
-      const squareWidth = boardElt.offsetWidth / V.size.y;
-      const bPos = boardElt.getBoundingClientRect();
-      const newArrow =
-        this.getSvgArrow(arrow, bPos.top, bPos.left, squareWidth);
-      document.getElementById("arrowCanvas")
-        .insertAdjacentElement("beforeend", newArrow);
+      const arrowIdx = this.arrows.findIndex(a => {
+        return (
+          a.start[0] == arrow.start[0] && a.start[1] == arrow.start[1] &&
+          a.end[0] == arrow.end[0] && a.end[1] == arrow.end[1]
+        );
+      });
+      if (arrowIdx >= 0)
+        // Erase the arrow
+        this.arrows.splice(arrowIdx, 1);
+      else
+        // Add to arrows vector:
+        this.arrows.push(arrow);
+      // NOTE: no need to draw here, will be re-draw
+      // by updated() hook callong re_setDrawings()
     },
     getSvgArrow: function(arrow, top, left, squareWidth) {
       const aStart =