chem
Advanced tools
Comparing version 3.0.0 to 3.1.0
@@ -675,3 +675,5 @@ **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* | ||
Plays the sound. If the sound is already playing, it will play another | ||
instance at the same time. | ||
instance at the same time. If the number of instances in the pool is | ||
greater than `maxPoolSize`, it will find the least recently played audio | ||
in the pool and restart it. | ||
@@ -678,0 +680,0 @@ Returns the HTML5 Audio object that is generating the sound, which has these |
# History | ||
## 3.1.0 | ||
* sound: `play` always returns an audio object. restarts old sounds | ||
if necessary. | ||
* capture mouse up events even if they go outside the canvas. | ||
* key up event handler on window instead of canvas. | ||
## 3.0.0 | ||
@@ -4,0 +11,0 @@ |
@@ -127,8 +127,3 @@ var Vec2d = require('vec2d').Vec2d; | ||
self.mousePos = new Vec2d(0, 0); | ||
addListener(self.canvas, 'mousemove', function(event){ | ||
self.mousePos = new Vec2d( | ||
(event.offsetX) != null ? event.offsetX : event.pageX - event.target.offsetLeft, | ||
(event.offsetY) != null ? event.offsetY : event.pageY - event.target.offsetTop); | ||
self.emit('mousemove', self.mousePos, MOUSE_OFFSET + event.which); | ||
}); | ||
addListener(self.canvas, 'mousemove', onMouseMove); | ||
addListener(self.canvas, 'mousedown', function(event){ | ||
@@ -140,12 +135,25 @@ var buttonId = MOUSE_OFFSET + event.which; | ||
self.canvas.focus(); | ||
window.addEventListener('mouseup', onMouseUp, false); | ||
window.addEventListener('mousemove', onMouseMove, false); | ||
return bubbleEvent(self, event); | ||
}); | ||
addListener(self.canvas, 'mouseup', function(event){ | ||
var buttonId; | ||
buttonId = MOUSE_OFFSET + event.which; | ||
function onMouseUp(event) { | ||
var buttonId = MOUSE_OFFSET + event.which; | ||
self.buttonStates[buttonId] = false; | ||
self.btnJustReleased[buttonId] = true; | ||
self.emit('buttonup', buttonId); | ||
window.removeEventListener('mouseup', onMouseUp, false); | ||
window.removeEventListener('mousemove', onMouseMove, false); | ||
return bubbleEvent(self, event); | ||
}); | ||
} | ||
function onMouseMove(event) { | ||
self.mousePos = new Vec2d( | ||
event.pageX - self.canvas.offsetLeft, | ||
event.pageY - self.canvas.offsetTop); | ||
self.emit('mousemove', self.mousePos, MOUSE_OFFSET + event.which); | ||
} | ||
// keyboard input | ||
@@ -159,3 +167,3 @@ addListener(self.canvas, 'keydown', function(event){ | ||
}); | ||
addListener(self.canvas, 'keyup', function(event){ | ||
addListener(window, 'keyup', function(event){ | ||
var buttonId = KEY_OFFSET + event.which; | ||
@@ -162,0 +170,0 @@ self.btnJustReleased[buttonId] = self.buttonStates[buttonId]; |
@@ -24,2 +24,5 @@ var EventEmitter = require('events').EventEmitter; | ||
Sound.prototype.play = function() { | ||
var oldest = null; | ||
var oldestCurrentTime = -1; | ||
// play a ready one | ||
for (var i = 0; i < this.audioPool.length; ++i) { | ||
@@ -30,4 +33,8 @@ var audio = this.audioPool[i]; | ||
return audio; | ||
} else if (audio.currentTime > oldestCurrentTime) { | ||
oldestCurrentTime = audio.currentTime; | ||
oldest = audio; | ||
} | ||
} | ||
// add a new one to the pool and play that one | ||
if (this.audioPool.length < this.maxPoolSize) { | ||
@@ -38,3 +45,8 @@ var newAudio = new Audio(this.currentSrc); | ||
this.audioPool.push(newAudio); | ||
return newAudio; | ||
} | ||
// recycle the oldest one | ||
oldest.currentTime = 0; | ||
oldest.play(); | ||
return oldest; | ||
}; | ||
@@ -41,0 +53,0 @@ |
@@ -5,3 +5,3 @@ { | ||
"author": "Andrew Kelley <superjoe30@gmail.com>", | ||
"version": "3.0.0", | ||
"version": "3.1.0", | ||
"main": "index.js", | ||
@@ -8,0 +8,0 @@ "license": "MIT", |
63625
942