|
let noop = function() { |
|
}; |
|
|
|
export default class ArcadeController { |
|
static factory(moveStartCallback, moveCallback, fireCallback, cbContext) { |
|
return new Phaser.ArcadeController(this.game, moveStartCallback, moveCallback, fireCallback, cbContext) |
|
} |
|
constructor(game, moveStartCallback = noop, moveCallback = noop, fireCallback = noop, callbackContext) { |
|
game.input.holdRate = 150; |
|
game.input.touch.consumeDocumentTouches(); |
|
game.input.onTap.add(this.onTap, this); |
|
game.input.onHold.add(this.onHold, this); |
|
game.input.onUp.add(this.onUp, this); |
|
this.movePointer = null; |
|
this.touchStartX = null; |
|
this.lastMoveX = null; |
|
this.moveStartCallback = moveStartCallback.bind(callbackContext); |
|
this.moveCallback = moveCallback.bind(callbackContext); |
|
this.fireCallback = fireCallback.bind(callbackContext); |
|
this.game = game; |
|
|
|
} |
|
|
|
onTap(pointer) { |
|
this.fireCallback(pointer.x); |
|
} |
|
onHold(pointer) { |
|
if (!this.movePointer) { |
|
this.movePointer = pointer; |
|
this.game.input.addMoveCallback(this.onMove, this); |
|
this.touchStartX = pointer.x; |
|
this.moveStartCallback(pointer.x); |
|
} |
|
} |
|
|
|
onUp(pointer) { |
|
if (this.movePointer == pointer) { |
|
this.game.input.deleteMoveCallback(this.onMove, this); |
|
this.movePointer = null; |
|
} |
|
} |
|
|
|
|
|
onMove(pointer, x, y) { |
|
if (pointer == this.movePointer) { |
|
let dx = x - this.touchStartX; |
|
this.moveCallback(x, dx); |
|
this.lastMoveX = x; |
|
} |
|
} |
|
|
|
resetTouch(x = this.lastMoveX) { |
|
this.touchStartX = x; |
|
} |
|
|
|
} |