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