[ts] Fixed multi touch runtime error.

Repro: touch down 1, touch down 2 (using second finger), touch up 1, touch up 2 -> error.
This commit is contained in:
Nathan Sweet 2021-06-22 23:08:09 -04:00
parent f77a51d33a
commit b3c405e9ca
10 changed files with 318 additions and 311 deletions

View File

@ -1337,8 +1337,8 @@ declare module spine.webgl {
lastY: number;
buttonDown: boolean;
currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement);
private setupCallbacks;
addListener(listener: InputListener): void;

View File

@ -9401,10 +9401,10 @@ var spine;
this.lastY = 0;
this.buttonDown = false;
this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0);
});
this.listeners = new Array();
this.element = element;
this.setupCallbacks(element);
}
@ -9416,10 +9416,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].down)
listeners[i].down(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = true;
@ -9453,10 +9452,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].up)
listeners[i].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
@ -9468,8 +9466,7 @@ var spine;
element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) {
if (_this.currTouch)
return;
if (!_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9490,9 +9487,11 @@ var spine;
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
}
ev.preventDefault();
}, false);
element.addEventListener("touchend", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9513,9 +9512,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchcancel", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9536,11 +9537,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch)
return;
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9558,6 +9559,7 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
};

File diff suppressed because one or more lines are too long

View File

@ -1306,8 +1306,8 @@ declare module spine.webgl {
lastY: number;
buttonDown: boolean;
currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement);
private setupCallbacks;
addListener(listener: InputListener): void;

View File

@ -9151,10 +9151,10 @@ var spine;
this.lastY = 0;
this.buttonDown = false;
this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0);
});
this.listeners = new Array();
this.element = element;
this.setupCallbacks(element);
}
@ -9166,10 +9166,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].down)
listeners[i].down(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = true;
@ -9203,10 +9202,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].up)
listeners[i].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
@ -9218,8 +9216,7 @@ var spine;
element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) {
if (_this.currTouch)
return;
if (!_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9240,9 +9237,11 @@ var spine;
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
}
ev.preventDefault();
}, false);
element.addEventListener("touchend", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9263,9 +9262,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchcancel", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9286,11 +9287,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch)
return;
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9308,6 +9309,7 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
};

File diff suppressed because one or more lines are too long

View File

@ -1306,8 +1306,8 @@ declare module spine.webgl {
lastY: number;
buttonDown: boolean;
currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement);
private setupCallbacks;
addListener(listener: InputListener): void;

View File

@ -9151,10 +9151,10 @@ var spine;
this.lastY = 0;
this.buttonDown = false;
this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0);
});
this.listeners = new Array();
this.element = element;
this.setupCallbacks(element);
}
@ -9166,10 +9166,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].down)
listeners[i].down(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = true;
@ -9203,10 +9202,9 @@ var spine;
var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top;
var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) {
for (var i = 0; i < listeners.length; i++)
if (listeners[i].up)
listeners[i].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
@ -9218,8 +9216,7 @@ var spine;
element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) {
if (_this.currTouch)
return;
if (!_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9240,9 +9237,11 @@ var spine;
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
}
ev.preventDefault();
}, false);
element.addEventListener("touchend", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9263,9 +9262,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchcancel", function (ev) {
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9286,11 +9287,11 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch)
return;
if (_this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -9308,6 +9309,7 @@ var spine;
break;
}
}
}
ev.preventDefault();
}, false);
};

File diff suppressed because one or more lines are too long

View File

@ -34,11 +34,12 @@ module spine.webgl {
lastY = 0;
buttonDown = false;
currTouch: Touch = null;
private listeners = new Array<InputListener>();
touchesPool = new Pool<spine.webgl.Touch>(() => {
return new spine.webgl.Touch(0, 0, 0);
});
private listeners = new Array<InputListener>();
constructor (element: HTMLElement) {
this.element = element;
this.setupCallbacks(element);
@ -52,9 +53,8 @@ module spine.webgl {
let y = ev.clientY - rect.top;
let listeners = this.listeners;
for (let i = 0; i < listeners.length; i++) {
for (let i = 0; i < listeners.length; i++)
if (listeners[i].down) listeners[i].down(x, y);
}
this.lastX = x;
this.lastY = y;
@ -92,9 +92,8 @@ module spine.webgl {
let y = ev.clientY - rect.top;
let listeners = this.listeners;
for (let i = 0; i < listeners.length; i++) {
for (let i = 0; i < listeners.length; i++)
if (listeners[i].up) listeners[i].up(x, y);
}
this.lastX = x;
this.lastY = y;
@ -104,14 +103,11 @@ module spine.webgl {
}
}
element.addEventListener("mousedown", mouseDown, true);
element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", (ev: TouchEvent) => {
if (this.currTouch) return;
if (!this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -133,9 +129,11 @@ module spine.webgl {
this.lastX = this.currTouch.x;
this.lastY = this.currTouch.y;
this.buttonDown = true;
}
ev.preventDefault();
}, false);
element.addEventListener("touchend", (ev: TouchEvent) => {
if (this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -156,9 +154,11 @@ module spine.webgl {
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchcancel", (ev: TouchEvent) => {
if (this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -179,11 +179,11 @@ module spine.webgl {
break;
}
}
}
ev.preventDefault();
}, false);
element.addEventListener("touchmove", (ev: TouchEvent) => {
if (!this.currTouch) return;
if (this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
@ -202,6 +202,7 @@ module spine.webgl {
break;
}
}
}
ev.preventDefault();
}, false);
}