source: other-projects/nz-flag-design/trunk/render-3d/Flag_files/KeyboardState.js@ 29475

Last change on this file since 29475 was 29475, checked in by davidb, 9 years ago

Initial set of files

File size: 3.2 KB
Line 
1/**
2 * @author Lee Stemkoski
3 *
4 * Usage:
5 * (1) create a global variable:
6 * var keyboard = new KeyboardState();
7 * (2) during main loop:
8 * keyboard.update();
9 * (3) check state of keys:
10 * keyboard.down("A") -- true for one update cycle after key is pressed
11 * keyboard.pressed("A") -- true as long as key is being pressed
12 * keyboard.up("A") -- true for one update cycle after key is released
13 *
14 * See KeyboardState.k object data below for names of keys whose state can be polled
15 */
16
17// initialization
18KeyboardState = function()
19{
20 // bind keyEvents
21 document.addEventListener("keydown", KeyboardState.onKeyDown, false);
22 document.addEventListener("keyup", KeyboardState.onKeyUp, false);
23}
24
25///////////////////////////////////////////////////////////////////////////////
26
27KeyboardState.k =
28{
29 8: "backspace", 9: "tab", 13: "enter", 16: "shift",
30 17: "ctrl", 18: "alt", 27: "esc", 32: "space",
31 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
32 37: "left", 38: "up", 39: "right", 40: "down",
33 45: "insert", 46: "delete", 186: ";", 187: "=",
34 188: ",", 189: "-", 190: ".", 191: "/",
35 219: "[", 220: "\\", 221: "]", 222: "'"
36}
37
38KeyboardState.status = {};
39
40KeyboardState.keyName = function ( keyCode )
41{
42 return ( KeyboardState.k[keyCode] != null ) ?
43 KeyboardState.k[keyCode] :
44 String.fromCharCode(keyCode);
45}
46
47KeyboardState.onKeyUp = function(event)
48{
49 var key = KeyboardState.keyName(event.keyCode);
50 if ( KeyboardState.status[key] )
51 KeyboardState.status[key].pressed = false;
52}
53
54KeyboardState.onKeyDown = function(event)
55{
56 var key = KeyboardState.keyName(event.keyCode);
57 if ( !KeyboardState.status[key] )
58 KeyboardState.status[key] = { down: false, pressed: false, up: false, updatedPreviously: false };
59}
60
61KeyboardState.prototype.update = function()
62{
63 for (var key in KeyboardState.status)
64 {
65 // insure that every keypress has "down" status exactly once
66 if ( !KeyboardState.status[key].updatedPreviously )
67 {
68 KeyboardState.status[key].down = true;
69 KeyboardState.status[key].pressed = true;
70 KeyboardState.status[key].updatedPreviously = true;
71 }
72 else // updated previously
73 {
74 KeyboardState.status[key].down = false;
75 }
76
77 // key has been flagged as "up" since last update
78 if ( KeyboardState.status[key].up )
79 {
80 delete KeyboardState.status[key];
81 continue; // move on to next key
82 }
83
84 if ( !KeyboardState.status[key].pressed ) // key released
85 KeyboardState.status[key].up = true;
86 }
87}
88
89KeyboardState.prototype.down = function(keyName)
90{
91 return (KeyboardState.status[keyName] && KeyboardState.status[keyName].down);
92}
93
94KeyboardState.prototype.pressed = function(keyName)
95{
96 return (KeyboardState.status[keyName] && KeyboardState.status[keyName].pressed);
97}
98
99KeyboardState.prototype.up = function(keyName)
100{
101 return (KeyboardState.status[keyName] && KeyboardState.status[keyName].up);
102}
103
104KeyboardState.prototype.debug = function()
105{
106 var list = "Keys active: ";
107 for (var arg in KeyboardState.status)
108 list += " " + arg
109 console.log(list);
110}
111
112///////////////////////////////////////////////////////////////////////////////
Note: See TracBrowser for help on using the repository browser.