From f29d17ec912f07f51360a40cbfe3074e79e68277 Mon Sep 17 00:00:00 2001 From: Florian Rival Date: Thu, 12 Mar 2015 13:47:24 +1300 Subject: [PATCH] Made draggableruntimeautomatism.js working with multitouch and added tests for it --- .../draggableruntimeautomatism.js | 117 ++++++++++++++---- .../tests/draggableruntimeautomatism.spec.js | 117 ++++++++++++++++++ GDJS/Runtime/inputmanager.js | 11 +- GDJS/Runtime/runtimescene.js | 10 +- GDJS/tests/karma.conf.js | 10 +- GDJS/tests/tests/common.js | 2 + 6 files changed, 240 insertions(+), 27 deletions(-) create mode 100644 Extensions/DraggableAutomatism/tests/draggableruntimeautomatism.spec.js diff --git a/Extensions/DraggableAutomatism/draggableruntimeautomatism.js b/Extensions/DraggableAutomatism/draggableruntimeautomatism.js index 714cb3d562..620703f13a 100644 --- a/Extensions/DraggableAutomatism/draggableruntimeautomatism.js +++ b/Extensions/DraggableAutomatism/draggableruntimeautomatism.js @@ -15,6 +15,9 @@ gdjs.DraggableRuntimeAutomatism = function(runtimeScene, automatismData, owner) gdjs.RuntimeAutomatism.call(this, runtimeScene, automatismData, owner); this._dragged = false; + this._touchId = null; + this._mouse = false; + this._xOffset = 0; this._yOffset = 0; }; @@ -23,46 +26,111 @@ gdjs.DraggableRuntimeAutomatism.prototype = Object.create( gdjs.RuntimeAutomatis gdjs.DraggableRuntimeAutomatism.thisIsARuntimeAutomatismConstructor = "DraggableAutomatism::Draggable"; gdjs.DraggableRuntimeAutomatism.prototype.onDeActivate = function() { - if ( this._dragged ) gdjs.DraggableRuntimeAutomatism.draggingSomething = false; - this._dragged = false; + this._endDrag(); }; -gdjs.DraggableRuntimeAutomatism.prototype.doStepPreEvents = function(runtimeScene) { - var mousePos = null; +gdjs.DraggableRuntimeAutomatism.prototype._endDrag = function() { + if ( this._dragged && this._mouse ) gdjs.DraggableRuntimeAutomatism.mouseDraggingSomething = false; + if ( this._dragged && this._touchId !== null ) gdjs.DraggableRuntimeAutomatism.touchDraggingSomething[this._touchId] = false; - //Begin drag ? - if ( !this._dragged && runtimeScene.getGame().getInputManager().isMouseButtonPressed(0) && + this._dragged = false; + this._mouse = false; + this._touchId = null; +} + +gdjs.DraggableRuntimeAutomatism.prototype._tryBeginDrag = function(runtimeScene) { + if (this._dragged) return false; + + var inputManager = runtimeScene.getGame().getInputManager(); + + //Try mouse + if (inputManager.isMouseButtonPressed(0) && !gdjs.DraggableRuntimeAutomatism.leftPressedLastFrame && - !gdjs.DraggableRuntimeAutomatism.draggingSomething ) { + !gdjs.DraggableRuntimeAutomatism.mouseDraggingSomething) { mousePos = runtimeScene.getLayer(this.owner.getLayer()).convertCoords( - runtimeScene.getGame().getInputManager().getMouseX(), - runtimeScene.getGame().getInputManager().getMouseY()); + inputManager.getMouseX(), + inputManager.getMouseY()); if (this.owner.insideObject(mousePos[0], mousePos[1])) { this._dragged = true; - gdjs.DraggableRuntimeAutomatism.draggingSomething = true; + this._mouse = true; this._xOffset = mousePos[0] - this.owner.getX(); this._yOffset = mousePos[1] - this.owner.getY(); + gdjs.DraggableRuntimeAutomatism.mouseDraggingSomething = true; + + return true; + } + } else { //Try touches + var touchIds = inputManager.getStartedTouchIdentifiers(); + for(var i = 0;i