X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2Fgame.js;h=14d3007a190ae5c27e1e6ec6acf55b32291a6e03;hb=15952ada1d73262371654351ab8a4471f64010fd;hp=2897b1cd00f6abd5d0c61d8e488075f71be54dab;hpb=1221ac47836806efb287b0323b92957d9129c653;p=vchess.git
diff --git a/public/javascripts/components/game.js b/public/javascripts/components/game.js
index 2897b1cd..14d3007a 100644
--- a/public/javascripts/components/game.js
+++ b/public/javascripts/components/game.js
@@ -240,38 +240,76 @@ Vue.component('my-game', {
);
}
elementArray.push(gameDiv);
- if (!!this.vr.reserve) //TODO: table, show counts for reserve pieces
- //
- // 3 |
+ if (!!this.vr.reserve)
{
- let reservePiecesArray = [];
+ const shiftIdx = (this.mycolor=="w" ? 0 : 1);
+ let myReservePiecesArray = [];
for (let i=0; i what about smartphone?!
+ // NOTE: click = mousedown + mouseup
on: {
mousedown: this.mousedown,
mousemove: this.mousemove,
mouseup: this.mouseup,
- touchdown: this.mousedown,
+ touchstart: this.mousedown,
touchmove: this.mousemove,
- touchup: this.mouseup,
+ touchend: this.mouseup,
},
},
elementArray
@@ -698,6 +751,19 @@ Vue.component('my-game', {
},
mousedown: function(e) {
e = e || window.event;
+ let ingame = false;
+ let elem = e.target;
+ while (!ingame && elem !== null)
+ {
+ if (elem.classList.contains("game"))
+ {
+ ingame = true;
+ break;
+ }
+ elem = elem.parentElement;
+ }
+ if (!ingame) //let default behavior (click on button...)
+ return;
e.preventDefault(); //disable native drag & drop
if (!this.selectedPiece && e.target.classList.contains("piece"))
{
@@ -717,7 +783,8 @@ Vue.component('my-game', {
this.possibleMoves = this.mode!="idle" && this.vr.canIplay(this.mycolor,startSquare)
? this.vr.getPossibleMovesFrom(startSquare)
: [];
- e.target.parentNode.appendChild(this.selectedPiece);
+ // Next line add moving piece just after current image (required for Crazyhouse reserve)
+ e.target.parentNode.insertBefore(this.selectedPiece, e.target.nextSibling);
}
},
mousemove: function(e) {
@@ -727,8 +794,11 @@ Vue.component('my-game', {
// If there is an active element, move it around
if (!!this.selectedPiece)
{
- this.selectedPiece.style.left = (e.clientX-this.start.x) + "px";
- this.selectedPiece.style.top = (e.clientY-this.start.y) + "px";
+ const [offsetX,offsetY] = !!e.clientX
+ ? [e.clientX,e.clientY] //desktop browser
+ : [e.changedTouches[0].pageX, e.changedTouches[0].pageY]; //smartphone
+ this.selectedPiece.style.left = (offsetX-this.start.x) + "px";
+ this.selectedPiece.style.top = (offsetY-this.start.y) + "px";
}
},
mouseup: function(e) {
@@ -737,7 +807,10 @@ Vue.component('my-game', {
e = e || window.event;
// Read drop target (or parentElement, parentNode... if type == "img")
this.selectedPiece.style.zIndex = -3000; //HACK to find square from final coordinates
- let landing = document.elementFromPoint(e.clientX, e.clientY);
+ const [offsetX,offsetY] = !!e.clientX
+ ? [e.clientX,e.clientY]
+ : [e.changedTouches[0].pageX, e.changedTouches[0].pageY];
+ let landing = document.elementFromPoint(offsetX, offsetY);
this.selectedPiece.style.zIndex = 3000;
while (landing.tagName == "IMG") //classList.contains(piece) fails because of mark/highlight
landing = landing.parentNode;