0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2024-11-23 09:26:51 -05:00

added mouse events

This commit is contained in:
liabru 2014-03-14 19:36:58 +00:00
parent 9153c7b836
commit 97aef1faea
2 changed files with 140 additions and 50 deletions

View file

@ -172,55 +172,9 @@ var Engine = {};
// update // update
Engine.update(engine, delta, correction); Engine.update(engine, delta, correction);
var pairs = engine.pairs; // trigger events that may have occured during the step
_triggerCollisionEvents(engine);
/** _triggerMouseEvents(engine);
* Fired after engine update, provides a list of all pairs that have started to collide in the current tick (if any)
*
* @event collisionStart
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionStart.length > 0) {
Events.trigger(engine, 'collisionStart', {
pairs: pairs.collisionStart
});
}
/**
* Fired after engine update, provides a list of all pairs that are colliding in the current tick (if any)
*
* @event collisionActive
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionActive.length > 0) {
Events.trigger(engine, 'collisionActive', {
pairs: pairs.collisionActive
});
}
/**
* Fired after engine update, provides a list of all pairs that have ended collision in the current tick (if any)
*
* @event collisionEnd
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionEnd.length > 0) {
Events.trigger(engine, 'collisionEnd', {
pairs: pairs.collisionEnd
});
}
/** /**
* Fired after engine update and all collision events * Fired after engine update and all collision events
@ -393,4 +347,121 @@ var Engine = {};
} }
}; };
/**
* Triggers mouse events
* @method _triggerMouseEvents
* @private
* @param {engine} engine
*/
var _triggerMouseEvents = function(engine) {
var mouse = engine.input.mouse,
mouseEvents = mouse.sourceEvents;
/**
* Fired when the mouse has moved (or a touch moves) during the last step
*
* @event mousemove
* @param {} event An event object
* @param {MouseEvent} event.mouseEvent The native MouseEvent from the browser
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (mouseEvents.mousemove) {
Events.trigger(mouse, 'mousemove', {
mouseEvent: mouseEvents.mousemove
});
}
/**
* Fired when the mouse is down (or a touch has started) during the last step
*
* @event mousedown
* @param {} event An event object
* @param {MouseEvent} event.mouseEvent The native MouseEvent from the browser
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (mouseEvents.mousedown) {
Events.trigger(mouse, 'mousedown', {
mouseEvent: mouseEvents.mousedown
});
}
/**
* Fired when the mouse is up (or a touch has ended) during the last step
*
* @event mouseup
* @param {} event An event object
* @param {MouseEvent} event.mouseEvent The native MouseEvent from the browser
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (mouseEvents.mouseup) {
Events.trigger(mouse, 'mouseup', {
mouseEvent: mouseEvents.mouseup
});
}
// reset the mouse state ready for the next step
Mouse.clearSourceEvents(mouse);
};
/**
* Triggers collision events
* @method _triggerMouseEvents
* @private
* @param {engine} engine
*/
var _triggerCollisionEvents = function(engine) {
var pairs = engine.pairs;
/**
* Fired after engine update, provides a list of all pairs that have started to collide in the current tick (if any)
*
* @event collisionStart
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionStart.length > 0) {
Events.trigger(engine, 'collisionStart', {
pairs: pairs.collisionStart
});
}
/**
* Fired after engine update, provides a list of all pairs that are colliding in the current tick (if any)
*
* @event collisionActive
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionActive.length > 0) {
Events.trigger(engine, 'collisionActive', {
pairs: pairs.collisionActive
});
}
/**
* Fired after engine update, provides a list of all pairs that have ended collision in the current tick (if any)
*
* @event collisionEnd
* @param {} event An event object
* @param {} event.pairs List of affected pairs
* @param {DOMHighResTimeStamp} event.timestamp The timestamp of the current tick
* @param {} event.source The source object of the event
* @param {} event.name The name of the event
*/
if (pairs.collisionEnd.length > 0) {
Events.trigger(engine, 'collisionEnd', {
pairs: pairs.collisionEnd
});
}
};
})(); })();

View file

@ -22,6 +22,12 @@ var Mouse;
this.mouseupPosition = { x: 0, y: 0 }; this.mouseupPosition = { x: 0, y: 0 };
this.button = -1; this.button = -1;
this.sourceEvents = {
mousemove: null,
mousedown: null,
mouseup: null
};
var mousemove = function(event) { var mousemove = function(event) {
var position = _getRelativeMousePosition(event, element), var position = _getRelativeMousePosition(event, element),
touches = event.changedTouches; touches = event.changedTouches;
@ -32,6 +38,7 @@ var Mouse;
} }
mouse.position = position; mouse.position = position;
mouse.sourceEvents.mousemove = event;
}; };
var mousedown = function(event) { var mousedown = function(event) {
@ -46,6 +53,7 @@ var Mouse;
} }
mouse.position = mouse.mousedownPosition = position; mouse.position = mouse.mousedownPosition = position;
mouse.sourceEvents.mousedown = event;
}; };
var mouseup = function(event) { var mouseup = function(event) {
@ -57,8 +65,8 @@ var Mouse;
} }
mouse.button = -1; mouse.button = -1;
mouse.position = mouse.mouseupPosition = position; mouse.position = mouse.mouseupPosition = position;
mouse.sourceEvents.mouseup = event;
}; };
element.addEventListener('mousemove', mousemove); element.addEventListener('mousemove', mousemove);
@ -80,6 +88,17 @@ var Mouse;
return new Mouse(element); return new Mouse(element);
}; };
/**
* Clears all captured source events
* @method create
* @param {mouse} mouse
*/
Mouse.clearSourceEvents = function(mouse) {
mouse.sourceEvents.mousemove = null;
mouse.sourceEvents.mousedown = null;
mouse.sourceEvents.mouseup = null;
};
/** /**
* Description * Description
* @method _getRelativeMousePosition * @method _getRelativeMousePosition