-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcheat-codes.js
104 lines (84 loc) · 2.13 KB
/
cheat-codes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*!
* cheat-codes.js v1.0.1
* (c) 2014, Benoit Asselin contact(at)ab-d.fr
* MIT Licence
*/
ig.module(
'plugins.cheat-codes'
)
.requires(
'impact.input'
)
.defines(function() { "use strict";
ig.CheatCodes = ig.Class.extend({
codes: {},
init: function() {
ig.CheatCodes.instances.push( this );
},
addCode: function( name, keys, success ) {
if( !name || 'object' !== typeof keys || 'function' !== typeof success ) { return; }
this.codes[name] = {
'keys': keys.join(),
'keysLen': keys.length,
'success': success
};
ig.CheatCodes.calcQueueMax();
},
removeCode: function( name ) {
delete this.codes[name];
ig.CheatCodes.calcQueueMax();
},
removeAllCodes: function() {
this.codes = {};
ig.CheatCodes.calcQueueMax();
},
checkCodes: function() {
var name, code, begin;
for( name in this.codes ) {
code = this.codes[name];
begin = ig.CheatCodes.queueMax - code.keysLen;
if( ig.CheatCodes.keysQueue.slice(begin).join() == code.keys ) {
code.success.apply( ig.game );
}
}
}
});
ig.CheatCodes.instances = [];
ig.CheatCodes.keysQueue = []; // keydown
ig.CheatCodes.queueMax = 0;
ig.CheatCodes.calcQueueMax = function() {
ig.CheatCodes.queueMax = 0;
var i, l, cheatCodes,
name, code;
for( i = 0, l = ig.CheatCodes.instances.length; i < l; ++i ) {
cheatCodes = ig.CheatCodes.instances[i];
for( name in cheatCodes.codes ) {
code = cheatCodes.codes[name];
if( ig.CheatCodes.queueMax < code.keysLen ) {
ig.CheatCodes.queueMax = code.keysLen;
}
}
}
};
ig.CheatCodes.keydown = function( event ) {
if( !ig.CheatCodes.queueMax ) { return; }
if( 'keydown' == event.type ) {
var tag = event.target.tagName;
if( 'INPUT' == tag || 'TEXTAREA' == tag ) { return; }
ig.CheatCodes.keysQueue.push( event.keyCode );
while( ig.CheatCodes.keysQueue.length > ig.CheatCodes.queueMax ) {
ig.CheatCodes.keysQueue.shift();
}
for( var i = 0, l = ig.CheatCodes.instances.length; i < l; ++i ) {
ig.CheatCodes.instances[i].checkCodes();
}
}
};
// ImpactJS
ig.Input.inject({
keydown: function( event ) {
ig.CheatCodes.keydown( event );
this.parent( event );
}
});
});