/* * GDevelop JS Platform * Copyright 2013-2015 Florian Rival (Florian.Rival@gmail.com). All rights reserved. * This project is released under the MIT License. */ /** * Store input made on a canvas: mouse position, key pressed * and touches states. * * See **bindStandardEvents** method for connecting the input * manager to a canvas and **onFrameEnded** for signaling the * end of a frame (necessary for proper touches events handling). * * @constructor * @namespace gdjs * @class InputManager */ gdjs.InputManager = function() { this._pressedKeys = new Hashtable(); this._releasedKeys = new Hashtable(); this._lastPressedKey = 0; this._pressedMouseButtons = new Array(5); this._releasedMouseButtons = new Array(5); this._mouseX = 0; this._mouseY = 0; this._mouseWheelDelta = 0; this._touches = new Hashtable(); this._startedTouches = []; //Identifiers of the touches that started during/before the frame. this._endedTouches = []; //Identifiers of the touches that ended during/before the frame. this._touchSimulateMouse = true; }; /** * Should be called whenever a key is pressed * @method onKeyPressed * @param keyCode {Number} The key code associated to the key press. */ gdjs.InputManager.prototype.onKeyPressed = function(keyCode) { this._pressedKeys.put(keyCode, true); this._lastPressedKey = keyCode; }; /** * Should be called whenever a key is released * @method onKeyReleased * @param keyCode {Number} The key code associated to the key release. */ gdjs.InputManager.prototype.onKeyReleased = function(keyCode) { this._pressedKeys.put(keyCode, false); this._releasedKeys.put(keyCode, true); }; /** * Return the code of the last key that was pressed. * @return {Number} The code of the last key pressed. * @method getLastPressedKey */ gdjs.InputManager.prototype.getLastPressedKey = function() { return this._lastPressedKey; }; /** * Return true if the key corresponding to keyCode is pressed. * @method isKeyPressed * @param keyCode {Number} The key code to be tested. */ gdjs.InputManager.prototype.isKeyPressed = function(keyCode) { return this._pressedKeys.containsKey(keyCode) && this._pressedKeys.get(keyCode); }; /** * Return true if the key corresponding to keyCode was released during the last frame. * @method wasKeyReleased * @param keyCode {Number} The key code to be tested. */ gdjs.InputManager.prototype.wasKeyReleased = function(keyCode) { return this._releasedKeys.containsKey(keyCode) && this._releasedKeys.get(keyCode); }; /** * Return true if any key is pressed * @method anyKeyPressed */ gdjs.InputManager.prototype.anyKeyPressed = function() { var allKeys = this._pressedKeys.entries(); for(var i = 0, len = allKeys.length;i < len;++i) { if (allKeys[i][1]) { return true; } } return false; }; /** * Should be called when the mouse is moved.
* Please note that the coordinates must be expressed relative to the view position. * * @method onMouseMove * @param x {Number} The mouse new X position * @param y {Number} The mouse new Y position */ gdjs.InputManager.prototype.onMouseMove = function(x,y) { this._mouseX = x; this._mouseY = y; }; /** * Get the mouse X position * * @method getMouseX * @return the mouse X position, relative to the game view. */ gdjs.InputManager.prototype.getMouseX = function() { return this._mouseX; }; /** * Get the mouse Y position * * @method getMouseY * @return the mouse Y position, relative to the game view. */ gdjs.InputManager.prototype.getMouseY = function() { return this._mouseY; }; /** * Should be called whenever a mouse button is pressed * @method onMouseButtonPressed * @param buttonCode {Number} The mouse button code associated to the event.
0: Left button
1: Right button */ gdjs.InputManager.prototype.onMouseButtonPressed = function(buttonCode) { this._pressedMouseButtons[buttonCode] = true; this._releasedMouseButtons[buttonCode] = false; }; /** * Should be called whenever a mouse button is released * @method onMouseButtonReleased * @param buttonCode {Number} The mouse button code associated to the event. ( See onMouseButtonPressed ) */ gdjs.InputManager.prototype.onMouseButtonReleased = function(buttonCode) { this._pressedMouseButtons[buttonCode] = false; this._releasedMouseButtons[buttonCode] = true; }; /** * Return true if the mouse button corresponding to buttonCode is pressed. * @method isMouseButtonPressed * @param buttonCode {Number} The mouse button code (0: Left button, 1: Right button). */ gdjs.InputManager.prototype.isMouseButtonPressed = function(buttonCode) { return this._pressedMouseButtons[buttonCode] !== undefined && this._pressedMouseButtons[buttonCode]; }; /** * Return true if the mouse button corresponding to buttonCode was just released. * @method isMouseButtonReleased * @param buttonCode {Number} The mouse button code (0: Left button, 1: Right button). */ gdjs.InputManager.prototype.isMouseButtonReleased = function(buttonCode) { return this._releasedMouseButtons[buttonCode] !== undefined && this._releasedMouseButtons[buttonCode]; }; /** * Should be called whenever the mouse wheel is used * @method onMouseWheel * @param wheelDelta {Number} The mouse wheel delta */ gdjs.InputManager.prototype.onMouseWheel = function(wheelDelta) { this._mouseWheelDelta = wheelDelta; }; /** * Return the mouse wheel delta * @method getMouseWheelDelta */ gdjs.InputManager.prototype.getMouseWheelDelta = function() { return this._mouseWheelDelta; }; /** * Get a touch X position * * @method getTouchX * @return the touch X position, relative to the game view. */ gdjs.InputManager.prototype.getTouchX = function(identifier) { if (!this._touches.containsKey(identifier)) return 0; return this._touches.get(identifier).x; }; /** * Get a touch Y position * * @method getTouchY * @return the touch Y position, relative to the game view. */ gdjs.InputManager.prototype.getTouchY = function(identifier) { if (!this._touches.containsKey(identifier)) return 0; return this._touches.get(identifier).y; }; /** * Return an array containing the identifiers of all touches. * * @method getAllTouchIdentifiers */ gdjs.InputManager.prototype.getAllTouchIdentifiers = function() { var touchIds = this._touches.keys(); for(var i = 0;i