summaryrefslogtreecommitdiffstats
path: root/source/keyboard.js
diff options
context:
space:
mode:
authorBen Firshman <ben@firshman.co.uk>2010-07-06 12:29:39 +0100
committerBen Firshman <ben@firshman.co.uk>2010-07-06 12:29:39 +0100
commitbe9c0d63d55192153b1623630c5f8a0331fa9ca0 (patch)
tree39ca273d0857de080673fc39e67015c878936ebc /source/keyboard.js
parent3afbd7a7f3007c586448e484e1e2b5fdc30b4f4e (diff)
downloadjsnes-be9c0d63d55192153b1623630c5f8a0331fa9ca0.zip
jsnes-be9c0d63d55192153b1623630c5f8a0331fa9ca0.tar.gz
jsnes-be9c0d63d55192153b1623630c5f8a0331fa9ca0.tar.bz2
Added support for building distribution packages with Jake
Diffstat (limited to 'source/keyboard.js')
-rw-r--r--source/keyboard.js84
1 files changed, 84 insertions, 0 deletions
diff --git a/source/keyboard.js b/source/keyboard.js
new file mode 100644
index 0000000..6342b2b
--- /dev/null
+++ b/source/keyboard.js
@@ -0,0 +1,84 @@
+/*
+JSNES, based on Jamie Sanders' vNES
+Copyright (C) 2010 Ben Firshman
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Keyboard events are bound in the UI
+JSNES.Keyboard = function() {
+ var i;
+
+ this.keys = {
+ KEY_A: 0,
+ KEY_B: 1,
+ KEY_SELECT: 2,
+ KEY_START: 3,
+ KEY_UP: 4,
+ KEY_DOWN: 5,
+ KEY_LEFT: 6,
+ KEY_RIGHT: 7
+ };
+
+ this.state1 = new Array(8);
+ for (i = 0; i < this.state1.length; i++) {
+ this.state1[i] = 0x40;
+ }
+ this.state2 = new Array(8);
+ for (i = 0; i < this.state2.length; i++) {
+ this.state2[i] = 0x40;
+ }
+};
+
+JSNES.Keyboard.prototype = {
+ setKey: function(key, value) {
+ switch (key) {
+ case 88: this.state1[this.keys.KEY_A] = value; break; // X
+ case 90: this.state1[this.keys.KEY_B] = value; break; // Z
+ case 17: this.state1[this.keys.KEY_SELECT] = value; break; // Right Ctrl
+ case 13: this.state1[this.keys.KEY_START] = value; break; // Enter
+ case 38: this.state1[this.keys.KEY_UP] = value; break; // Up
+ case 40: this.state1[this.keys.KEY_DOWN] = value; break; // Down
+ case 37: this.state1[this.keys.KEY_LEFT] = value; break; // Left
+ case 39: this.state1[this.keys.KEY_RIGHT] = value; break; // Right
+
+ case 103: this.state2[this.keys.KEY_A] = value; break; // Num-7
+ case 105: this.state2[this.keys.KEY_B] = value; break; // Num-9
+ case 99: this.state2[this.keys.KEY_SELECT] = value; break; // Num-3
+ case 97: this.state2[this.keys.KEY_START] = value; break; // Num-1
+ case 104: this.state2[this.keys.KEY_UP] = value; break; // Num-8
+ case 98: this.state2[this.keys.KEY_DOWN] = value; break; // Num-2
+ case 100: this.state2[this.keys.KEY_LEFT] = value; break; // Num-4
+ case 102: this.state2[this.keys.KEY_RIGHT] = value; break; // Num-6
+ default: return true;
+ }
+ return false; // preventDefault
+ },
+
+ keyDown: function(evt) {
+ if (!this.setKey(evt.keyCode, 0x41) && evt.preventDefault) {
+ evt.preventDefault();
+ }
+ },
+
+ keyUp: function(evt) {
+ if (!this.setKey(evt.keyCode, 0x40) && evt.preventDefault) {
+ evt.preventDefault();
+ }
+ },
+
+ keyPress: function(evt) {
+ evt.preventDefault();
+ }
+};