78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
#include rng.js
|
|
|
|
const OsuKeys = (function() {
|
|
const urlBase = '//static.flash.moe/sounds/';
|
|
const rng = new MamiRNG;
|
|
let sndRng = false;
|
|
|
|
const playSound = function(name) {
|
|
if(!mami.hasSound())
|
|
return;
|
|
|
|
const urls = {
|
|
ogg: urlBase + name + '.ogg',
|
|
mp3: urlBase + name + '.mp3',
|
|
};
|
|
|
|
mami.getSound().load('OsuKeys:' + name, urls, function(success, buffer) {
|
|
if(success) {
|
|
const source = buffer.createSource();
|
|
if(sndRng)
|
|
source.setRate(1.8 - (rng.sample() * 1.5));
|
|
source.play();
|
|
}
|
|
});
|
|
};
|
|
|
|
const playPress = function() { playSound('key-press-' + rng.next(1, 5).toString()); };
|
|
const playCaps = function() { playSound('key-caps'); };
|
|
const playConfirm = function() { playSound('key-confirm'); };
|
|
const playDelete = function() { playSound('key-delete'); };
|
|
const playMove = function() { playSound('key-movement'); };
|
|
|
|
const keyHandler = function(ev) {
|
|
switch(ev.key) {
|
|
case 'Enter':
|
|
case 'NumpadEnter':
|
|
playConfirm();
|
|
break;
|
|
case 'Backspace':
|
|
case 'Delete':
|
|
playDelete();
|
|
break;
|
|
case 'NumLock':
|
|
case 'CapsLock':
|
|
case 'ScrollLock':
|
|
playCaps();
|
|
break;
|
|
case 'ArrowUp':
|
|
case 'ArrowDown':
|
|
case 'ArrowLeft':
|
|
case 'ArrowRight':
|
|
playMove();
|
|
break;
|
|
case 'Control':
|
|
case 'Alt':
|
|
case 'Shift':
|
|
break;
|
|
default:
|
|
playPress();
|
|
break;
|
|
}
|
|
};
|
|
|
|
return {
|
|
playConfirm: playConfirm,
|
|
playDelete: playDelete,
|
|
playCaps: playCaps,
|
|
playMove: playMove,
|
|
playPress: playPress,
|
|
setEnable: function(value) {
|
|
if(value)
|
|
window.addEventListener('keydown', keyHandler);
|
|
else
|
|
window.removeEventListener('keydown', keyHandler);
|
|
},
|
|
setRandomRate: function(value) { sndRng = !!value; },
|
|
};
|
|
})();
|