mirror of
https://github.com/PavelDoGreat/WebGL-Fluid-Simulation.git
synced 2025-10-04 18:01:40 +02:00
improve touch handling
This commit is contained in:
17
script.js
17
script.js
@@ -70,7 +70,6 @@ function pointerPrototype () {
|
|||||||
|
|
||||||
let pointers = [];
|
let pointers = [];
|
||||||
let splatStack = [];
|
let splatStack = [];
|
||||||
let bloomFramebuffers = [];
|
|
||||||
pointers.push(new pointerPrototype());
|
pointers.push(new pointerPrototype());
|
||||||
|
|
||||||
const { gl, ext } = getWebGLContext(canvas);
|
const { gl, ext } = getWebGLContext(canvas);
|
||||||
@@ -902,6 +901,7 @@ let divergence;
|
|||||||
let curl;
|
let curl;
|
||||||
let pressure;
|
let pressure;
|
||||||
let bloom;
|
let bloom;
|
||||||
|
let bloomFramebuffers = [];
|
||||||
let sunrays;
|
let sunrays;
|
||||||
let sunraysTemp;
|
let sunraysTemp;
|
||||||
|
|
||||||
@@ -1429,9 +1429,11 @@ canvas.addEventListener('mousedown', e => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
canvas.addEventListener('mousemove', e => {
|
canvas.addEventListener('mousemove', e => {
|
||||||
|
let pointer = pointers[0];
|
||||||
|
if (!pointer.down) return;
|
||||||
let posX = scaleByPixelRatio(e.offsetX);
|
let posX = scaleByPixelRatio(e.offsetX);
|
||||||
let posY = scaleByPixelRatio(e.offsetY);
|
let posY = scaleByPixelRatio(e.offsetY);
|
||||||
updatePointerMoveData(pointers[0], posX, posY);
|
updatePointerMoveData(pointer, posX, posY);
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('mouseup', () => {
|
window.addEventListener('mouseup', () => {
|
||||||
@@ -1444,9 +1446,11 @@ canvas.addEventListener('touchstart', e => {
|
|||||||
while (touches.length >= pointers.length)
|
while (touches.length >= pointers.length)
|
||||||
pointers.push(new pointerPrototype());
|
pointers.push(new pointerPrototype());
|
||||||
for (let i = 0; i < touches.length; i++) {
|
for (let i = 0; i < touches.length; i++) {
|
||||||
|
let pointer = pointers[i + 1];
|
||||||
|
if (pointer.down) continue;
|
||||||
let posX = scaleByPixelRatio(touches[i].pageX);
|
let posX = scaleByPixelRatio(touches[i].pageX);
|
||||||
let posY = scaleByPixelRatio(touches[i].pageY);
|
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();
|
e.preventDefault();
|
||||||
const touches = e.targetTouches;
|
const touches = e.targetTouches;
|
||||||
for (let i = 0; i < touches.length; i++) {
|
for (let i = 0; i < touches.length; i++) {
|
||||||
|
let pointer = pointers[i + 1];
|
||||||
|
if (!pointer.down) continue;
|
||||||
let posX = scaleByPixelRatio(touches[i].pageX);
|
let posX = scaleByPixelRatio(touches[i].pageX);
|
||||||
let posY = scaleByPixelRatio(touches[i].pageY);
|
let posY = scaleByPixelRatio(touches[i].pageY);
|
||||||
updatePointerMoveData(pointers[i + 1], posX, posY);
|
updatePointerMoveData(pointer, posX, posY);
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
@@ -1465,6 +1471,7 @@ window.addEventListener('touchend', e => {
|
|||||||
for (let i = 0; i < touches.length; i++)
|
for (let i = 0; i < touches.length; i++)
|
||||||
{
|
{
|
||||||
let pointer = pointers.find(p => p.id == touches[i].identifier);
|
let pointer = pointers.find(p => p.id == touches[i].identifier);
|
||||||
|
if (pointer == null) continue;
|
||||||
updatePointerUpData(pointer);
|
updatePointerUpData(pointer);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -1490,13 +1497,13 @@ function updatePointerDownData (pointer, id, posX, posY) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updatePointerMoveData (pointer, posX, posY) {
|
function updatePointerMoveData (pointer, posX, posY) {
|
||||||
pointer.moved = pointer.down;
|
|
||||||
pointer.prevTexcoordX = pointer.texcoordX;
|
pointer.prevTexcoordX = pointer.texcoordX;
|
||||||
pointer.prevTexcoordY = pointer.texcoordY;
|
pointer.prevTexcoordY = pointer.texcoordY;
|
||||||
pointer.texcoordX = posX / canvas.width;
|
pointer.texcoordX = posX / canvas.width;
|
||||||
pointer.texcoordY = 1.0 - posY / canvas.height;
|
pointer.texcoordY = 1.0 - posY / canvas.height;
|
||||||
pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);
|
pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);
|
||||||
pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);
|
pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);
|
||||||
|
pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updatePointerUpData (pointer) {
|
function updatePointerUpData (pointer) {
|
||||||
|
Reference in New Issue
Block a user