1
0
Fork 0
mirror of https://github.com/sbrl/Nibriboard.git synced 2018-01-10 21:33:49 +00:00

[client] Add mouse manager class

This commit is contained in:
Starbeamrainbowlabs 2017-03-28 20:25:12 +01:00
parent 332d2728bc
commit 4b5a895f0e

View file

@ -0,0 +1,126 @@
"use strict";
/*****************************************************************************
******************************** Mouse class ********************************
********************************************************************* v0.1 **
* A simple mouse class, records and stores mouse information later use
* outside an event listener. Depends on my earlier Vector class.
*
* Author: Starbeamrainbowlabs
* Twitter: @SBRLabs
* Email: feedback at starbeamrainbowlabs dot com
*
* From https://gist.github.com/sbrl/06db619f2a1f75305fbd54f66402459b
*****************************************************************************
* Originally written for the Nibriboard client.
*****************************************************************************
* Changelog
*****************************************************************************
* v0.1 - 28th March 2017
* Initial release.
*/
import Vector from './Vector.js';
/**
* A reference for the different mouse button types.
* @type {Object}
*/
var MouseButtons = {
/**
* The left mouse button.
* @type {Number}
*/
Left: 0,
/**
* The right mouse button.
* @type {Number}
*/
Right: 2,
/**
* The middle mouse button.
* @type {Number}
*/
Middle: 1
};
class Mouse
{
constructor()
{
/**
* Whether the left mouse button is down or not.
* @type {boolean}
*/
this.leftDown = false;
/**
* Whether the right mouse button is down or not.
* @type {boolean}
*/
this.rightDown = false;
/**
* Whether the middle mouse button is down or not.
* @type {boolean}
*/
this.middleDown = false;
/**
* The last known position of the mouse in document-space.
* @type {Vector}
*/
this.position = new Vector(0, 0);
// Register the required event listeners
document.addEventListener("mouseup", handleMouseUp.bind(this));
document.addEventListener("mousedown", handleMouseDown.bind(this));
document.addEventListener("mousemove", handleMouseMove.bind(this));
}
handleMouseUp(event)
{
switch(event.button)
{
case MouseButtons.Left:
this.leftDown = false;
break;
case MouseButtons.Right:
this.rightDown = false;
break;
case MouseButtons.Middle:
this.middleDown = false;
break;
default:
console.warn(`Unknown mouse up button type ${even.button}`);
break;
}
}
handleMouseDown(event)
{
switch(event.button)
{
case MouseButtons.Left:
this.leftDown = true;
break;
case MouseButtons.Right:
this.rightDown = true;
break;
case MouseButtons.Middle:
this.middleDown = true;
break;
default:
console.warn(`Unknown mouse down button type ${even.button}`);
break;
}
}
handleMouseMove(event)
{
this.position.x = event.clientX;
this.position.y = event.clientY;
this.pressur = typeof event.pressure === "number" ? event.pressure : event.mozPressure;
}
}
export { Mouse, MouseButtons };
export default Mouse;