var Class = require('../utils/Class'); var SmoothStepInterpolation = require('../math/interpolation/SmoothStepInterpolation'); var Vector2 = require('../math/Vector2'); var Pointer = new Class({ initialize: function Pointer(manager, id){ this.manager = manager; this.id = id; this.event; this.camera = null ; this.buttons = 0; this.position = new Vector2(); this.prevPosition = new Vector2(); this.worldX = 0; this.worldY = 0; this.downX = 0; this.downY = 0; this.downTime = 0; this.upX = 0; this.upY = 0; this.upTime = 0; this.primaryDown = false ; this.dragState = 0; this.isDown = false ; this.dirty = false ; this.justDown = false ; this.justUp = false ; this.justMoved = false ; this.wasTouch = false ; this.movementX = 0; this.movementY = 0; this.identifier = 0; this.pointerId = null ; this.active = (id === 0)? true : false ; } , positionToCamera: function (camera, output){ return camera.getWorldPoint(this.x, this.y, output); } , reset: function (){ this.dirty = false ; this.justDown = false ; this.justUp = false ; this.justMoved = false ; this.movementX = 0; this.movementY = 0; } , up: function (event, time){ if (event.buttons) { this.buttons = event.buttons; } this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); if (event.button === 0) { this.primaryDown = false ; this.upX = this.x; this.upY = this.y; this.upTime = time; } this.justUp = true ; this.isDown = false ; this.dirty = true ; this.wasTouch = false ; } , down: function (event, time){ if (event.buttons) { this.buttons = event.buttons; } this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); if (event.button === 0) { this.primaryDown = true ; this.downX = this.x; this.downY = this.y; this.downTime = time; } this.justDown = true ; this.isDown = true ; this.dirty = true ; this.wasTouch = false ; } , move: function (event){ if (event.buttons) { this.buttons = event.buttons; } this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); if (this.manager.mouse.locked) { this.movementX += event.movementX || event.mozMovementX || event.webkitMovementX || 0; this.movementY += event.movementY || event.mozMovementY || event.webkitMovementY || 0; } this.justMoved = true ; this.dirty = true ; this.wasTouch = false ; } , touchstart: function (event, time){ if (event.pointerId) { this.pointerId = event.pointerId; } this.identifier = event.identifier; _AN_Write_target('target', this, false , _AN_Read_target('target', event)); this.active = true ; this.buttons = 1; this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); this.primaryDown = true ; this.downX = this.x; this.downY = this.y; this.downTime = time; this.justDown = true ; this.isDown = true ; this.dirty = true ; this.wasTouch = true ; } , touchmove: function (event){ this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); this.justMoved = true ; this.dirty = true ; this.wasTouch = true ; } , touchend: function (event, time){ this.buttons = 0; this.event = event; this.manager.transformPointer(this, event.pageX, event.pageY); this.primaryDown = false ; this.upX = this.x; this.upY = this.y; this.upTime = time; this.justUp = true ; this.isDown = false ; this.dirty = true ; this.wasTouch = true ; this.active = false ; } , noButtonDown: function (){ return (this.buttons === 0); } , leftButtonDown: function (){ return (this.buttons & 1); } , rightButtonDown: function (){ return (this.buttons & 2); } , middleButtonDown: function (){ return (this.buttons & 4); } , backButtonDown: function (){ return (this.buttons & 8); } , forwardButtonDown: function (){ return (this.buttons & 16); } , getInterpolatedPosition: function (steps, out){ if (steps === undefined) { steps = 10; } if (out === undefined) { out = [] ; } var prevX = this.prevPosition.x; var prevY = this.prevPosition.y; var curX = this.position.x; var curY = this.position.y; for (var i = 0; i < steps; i++ ){ var t = (1 / steps) * i; out[i] = { x: SmoothStepInterpolation(t, prevX, curX), y: SmoothStepInterpolation(t, prevY, curY)} ; } return out; } , destroy: function (){ this.camera = null ; this.manager = null ; this.position = null ; } , x: { get: function (){ return this.position.x; } , set: function (value){ this.position.x = value; } } , y: { get: function (){ return this.position.y; } , set: function (value){ this.position.y = value; } } } ); module.exports = Pointer;