forked from sent/waves
216 lines
4.7 KiB
JavaScript
216 lines
4.7 KiB
JavaScript
"use strict";
|
|
|
|
var KEY_UP = 38,
|
|
KEY_DOWN = 40,
|
|
KEY_LEFT = 37,
|
|
KEY_RIGHT = 39,
|
|
KEY_JUMP = 32,
|
|
KEY_RESTART = 82,
|
|
KEY_MUTE = 77,
|
|
KEY_SHOOT = 84,
|
|
KEY_SUICIDE = 81;
|
|
|
|
|
|
var KBD_STORAGE_KEY = "keyboard_settings";
|
|
|
|
/** @constructor */
|
|
function KeyboardManager(game)
|
|
{
|
|
this.keysPressed = {};
|
|
this.keyWasPressed = {};
|
|
this.game = game;
|
|
|
|
var fromSettings = game.storage.getItem(KBD_STORAGE_KEY);
|
|
|
|
if(fromSettings)
|
|
{
|
|
this.gameKeys = fromSettings;
|
|
}
|
|
else
|
|
{
|
|
this.resetKeys();
|
|
}
|
|
|
|
window.addEventListener("keydown", this.onkeydown.bind(this), false);
|
|
window.addEventListener("keyup", this.onkeyup.bind(this), false);
|
|
|
|
window.addEventListener("blur", this.onblur.bind(this), false);
|
|
|
|
var self = this;
|
|
|
|
var click_count = 0;
|
|
|
|
document.getElementById("reset_keys").addEventListener("click",
|
|
function()
|
|
{
|
|
this.textContent = [
|
|
"Done.",
|
|
"Keys resetted.",
|
|
"You keep failing at this, huh?",
|
|
"undefined",
|
|
"Just kidding.",
|
|
"Bored?",
|
|
"Okay ...",
|
|
"There once was a girl from Kentucky ..."
|
|
][click_count++];
|
|
|
|
if(click_count === 8)
|
|
{
|
|
location.href = "https://www.youtube.com/watch?v=oHg5SJYRHA0";
|
|
}
|
|
|
|
self.resetKeys();
|
|
self.saveSettings();
|
|
}, false);
|
|
|
|
[
|
|
["left", KEY_LEFT],
|
|
["right", KEY_RIGHT],
|
|
["shoot", KEY_SHOOT],
|
|
["jump", KEY_JUMP],
|
|
["mute", KEY_MUTE],
|
|
["restart", KEY_RESTART],
|
|
].forEach(addKeyChanger);
|
|
|
|
function addKeyChanger(key)
|
|
{
|
|
var name = key[0],
|
|
keyNumber = key[1],
|
|
id = "change_" + name,
|
|
element = document.getElementById(id),
|
|
keyField = document.getElementById("keys"),
|
|
msgField = document.getElementById("press_key_msg");
|
|
|
|
element.addEventListener("click", function()
|
|
{
|
|
keyField.style.display = "none";
|
|
msgField.style.display = "block";
|
|
|
|
window.addEventListener("keydown", function changeKey(e)
|
|
{
|
|
if(e.which === 27)
|
|
{
|
|
// escape
|
|
}
|
|
else
|
|
{
|
|
Object.deleteByValue(self.gameKeys, keyNumber);
|
|
|
|
self.gameKeys[e.which] = keyNumber;
|
|
self.saveSettings();
|
|
}
|
|
|
|
window.removeEventListener("keydown", changeKey, false);
|
|
keyField.style.display = "block";
|
|
msgField.style.display = "none";
|
|
|
|
e.preventDefault();
|
|
|
|
}, false);
|
|
}, false);
|
|
}
|
|
};
|
|
|
|
KeyboardManager.prototype.resetKeys = function()
|
|
{
|
|
this.gameKeys = {
|
|
38: KEY_UP,
|
|
40: KEY_DOWN,
|
|
37: KEY_LEFT,
|
|
39: KEY_RIGHT,
|
|
32: KEY_JUMP,
|
|
82: KEY_RESTART,
|
|
77: KEY_MUTE,
|
|
84: KEY_SHOOT,
|
|
81: KEY_SUICIDE,
|
|
};
|
|
};
|
|
|
|
KeyboardManager.prototype.saveSettings = function()
|
|
{
|
|
this.game.storage.setItem(KBD_STORAGE_KEY, this.gameKeys);
|
|
};
|
|
|
|
KeyboardManager.prototype.isValid = function(e)
|
|
{
|
|
return !(
|
|
e.ctrlKey || e.altKey || e.metaKey ||
|
|
e.target instanceof HTMLTextAreaElement ||
|
|
e.target instanceof HTMLInputElement ||
|
|
!this.gameKeys[e.which]
|
|
);
|
|
};
|
|
|
|
KeyboardManager.prototype.onkeydown = function(e)
|
|
{
|
|
if(this.keysPressed[e.which])
|
|
{
|
|
e.preventDefault();
|
|
}
|
|
else if(this.isValid(e))
|
|
{
|
|
this.keysPressed[e.which] = true;
|
|
this.handleKey(false, e.which);
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
|
|
KeyboardManager.prototype.onkeyup = function(e)
|
|
{
|
|
if(this.isValid(e))
|
|
{
|
|
this.keysPressed[e.which] = false;
|
|
this.handleKey(true, e.which);
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
|
|
KeyboardManager.prototype.onblur = function()
|
|
{
|
|
var keys = Object.keys(this.keysPressed);
|
|
|
|
for(var i = 0; i < keys.length; i++)
|
|
{
|
|
var key = keys[i];
|
|
|
|
if(this.keysPressed[key])
|
|
{
|
|
this.handleKey(true, Number(key));
|
|
}
|
|
}
|
|
|
|
this.keysPressed = {};
|
|
}
|
|
|
|
KeyboardManager.prototype.handleKey = function(is_up, keyCode)
|
|
{
|
|
var code = this.gameKeys[keyCode];
|
|
|
|
if(code === KEY_MUTE)
|
|
{
|
|
if(!is_up)
|
|
{
|
|
this.game.toggleMute();
|
|
}
|
|
}
|
|
else if(code === KEY_RESTART)
|
|
{
|
|
if(!is_up)
|
|
{
|
|
this.game.restart();
|
|
}
|
|
}
|
|
if(code === KEY_SUICIDE)
|
|
{
|
|
if(!is_up)
|
|
{
|
|
this.game.die();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.keyWasPressed[code] = !is_up;
|
|
}
|
|
};
|
|
|