From d28b74031e76b08146e0d77173806f04a7ff10e6 Mon Sep 17 00:00:00 2001 From: Pavel Dobryakov <paveldobryakov@Pavels-MacBook-Pro.local> Date: Sat, 31 Aug 2019 18:46:30 +0200 Subject: [PATCH] improve touch handling --- script.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/script.js b/script.js index dc428a7..53553c2 100644 --- a/script.js +++ b/script.js @@ -70,7 +70,6 @@ function pointerPrototype () { let pointers = []; let splatStack = []; -let bloomFramebuffers = []; pointers.push(new pointerPrototype()); const { gl, ext } = getWebGLContext(canvas); @@ -902,6 +901,7 @@ let divergence; let curl; let pressure; let bloom; +let bloomFramebuffers = []; let sunrays; let sunraysTemp; @@ -1429,9 +1429,11 @@ canvas.addEventListener('mousedown', e => { }); canvas.addEventListener('mousemove', e => { + let pointer = pointers[0]; + if (!pointer.down) return; let posX = scaleByPixelRatio(e.offsetX); let posY = scaleByPixelRatio(e.offsetY); - updatePointerMoveData(pointers[0], posX, posY); + updatePointerMoveData(pointer, posX, posY); }); window.addEventListener('mouseup', () => { @@ -1444,9 +1446,11 @@ canvas.addEventListener('touchstart', e => { while (touches.length >= pointers.length) pointers.push(new pointerPrototype()); for (let i = 0; i < touches.length; i++) { + let pointer = pointers[i + 1]; + if (pointer.down) continue; let posX = scaleByPixelRatio(touches[i].pageX); let posY = scaleByPixelRatio(touches[i].pageY); - updatePointerDownData(pointers[i + 1], touches[i].identifier, posX, posY); + updatePointerDownData(pointer, touches[i].identifier, posX, posY); } }); @@ -1454,9 +1458,11 @@ canvas.addEventListener('touchmove', e => { e.preventDefault(); const touches = e.targetTouches; for (let i = 0; i < touches.length; i++) { + let pointer = pointers[i + 1]; + if (!pointer.down) continue; let posX = scaleByPixelRatio(touches[i].pageX); let posY = scaleByPixelRatio(touches[i].pageY); - updatePointerMoveData(pointers[i + 1], posX, posY); + updatePointerMoveData(pointer, posX, posY); } }, false); @@ -1465,6 +1471,7 @@ window.addEventListener('touchend', e => { for (let i = 0; i < touches.length; i++) { let pointer = pointers.find(p => p.id == touches[i].identifier); + if (pointer == null) continue; updatePointerUpData(pointer); } }); @@ -1490,13 +1497,13 @@ function updatePointerDownData (pointer, id, posX, posY) { } function updatePointerMoveData (pointer, posX, posY) { - pointer.moved = pointer.down; pointer.prevTexcoordX = pointer.texcoordX; pointer.prevTexcoordY = pointer.texcoordY; pointer.texcoordX = posX / canvas.width; pointer.texcoordY = 1.0 - posY / canvas.height; pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX); pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY); + pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0; } function updatePointerUpData (pointer) { -- GitLab