mirror of
https://github.com/photonstorm/phaser
synced 2025-02-25 11:57:19 +00:00
Finished off Key Combo support. All config options now working correctly.
This commit is contained in:
parent
101be294e0
commit
fa69035e4f
6 changed files with 76 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
||||||
var CHECKSUM = {
|
var CHECKSUM = {
|
||||||
build: '6393ce50-f872-11e6-ba94-79064404f409'
|
build: '9d366fd0-f888-11e6-8597-e13c3c71fc73'
|
||||||
};
|
};
|
||||||
module.exports = CHECKSUM;
|
module.exports = CHECKSUM;
|
|
@ -2,6 +2,7 @@ var Event = function (type)
|
||||||
{
|
{
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
|
||||||
|
// The element that initiated the event.
|
||||||
this.target;
|
this.target;
|
||||||
|
|
||||||
this._propagate = true;
|
this._propagate = true;
|
||||||
|
|
|
@ -167,13 +167,9 @@ KeyboardManager.prototype = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
addKeyCombo: function (keys, config)
|
createCombo: function (keys, config)
|
||||||
{
|
{
|
||||||
var combo = new KeyCombo(keys, config);
|
return new KeyCombo(this, keys, config);
|
||||||
|
|
||||||
this.combos.push(combo);
|
|
||||||
|
|
||||||
return combo;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent
|
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/KeyboardEvent
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
var GetObjectValue = require('../../../utils/object/GetObjectValue');
|
var GetObjectValue = require('../../../utils/object/GetObjectValue');
|
||||||
|
var ResetKeyCombo = require('./ResetKeyCombo');
|
||||||
|
var ProcessKeyCombo = require('./ProcessKeyCombo');
|
||||||
|
var KeyComboMatchEvent = require('./KeyComboMatchEvent');
|
||||||
|
|
||||||
// Keys can be either:
|
// Keys can be either:
|
||||||
//
|
//
|
||||||
|
@ -8,6 +11,8 @@ var GetObjectValue = require('../../../utils/object/GetObjectValue');
|
||||||
|
|
||||||
var KeyCombo = function (keyboardManager, keys, config)
|
var KeyCombo = function (keyboardManager, keys, config)
|
||||||
{
|
{
|
||||||
|
if (config === undefined) { config = {}; }
|
||||||
|
|
||||||
// Can't have a zero or single length combo (string or array based)
|
// Can't have a zero or single length combo (string or array based)
|
||||||
if (keys.length < 2)
|
if (keys.length < 2)
|
||||||
{
|
{
|
||||||
|
@ -68,13 +73,53 @@ var KeyCombo = function (keyboardManager, keys, config)
|
||||||
|
|
||||||
// If previously matched and they press Key 1 again, will it reset?
|
// If previously matched and they press Key 1 again, will it reset?
|
||||||
this.resetOnMatch = GetObjectValue(config, 'resetOnMatch', false);
|
this.resetOnMatch = GetObjectValue(config, 'resetOnMatch', false);
|
||||||
|
|
||||||
|
// If the combo matches, will it delete itself?
|
||||||
|
this.deleteOnMatch = GetObjectValue(config, 'deleteOnMatch', false);
|
||||||
|
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
var onKeyDownHandler = function (event)
|
||||||
|
{
|
||||||
|
if (_this.matched || !_this.enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var matched = ProcessKeyCombo(event.data, _this);
|
||||||
|
|
||||||
|
if (matched)
|
||||||
|
{
|
||||||
|
_this.manager.events.dispatch(new KeyComboMatchEvent(_this, event));
|
||||||
|
|
||||||
|
if (_this.resetOnMatch)
|
||||||
|
{
|
||||||
|
ResetKeyCombo(_this);
|
||||||
|
}
|
||||||
|
else if (_this.deleteOnMatch)
|
||||||
|
{
|
||||||
|
_this.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.onKeyDown = onKeyDownHandler;
|
||||||
|
|
||||||
|
this.manager.events.on('KEY_DOWN_EVENT', onKeyDownHandler);
|
||||||
};
|
};
|
||||||
|
|
||||||
KeyCombo.prototype.constructor = KeyCombo;
|
KeyCombo.prototype.constructor = KeyCombo;
|
||||||
|
|
||||||
KeyCombo.prototype = {
|
KeyCombo.prototype = {
|
||||||
|
|
||||||
|
destroy: function ()
|
||||||
|
{
|
||||||
|
this.enabled = false;
|
||||||
|
this.keyCodes = [];
|
||||||
|
|
||||||
|
this.manager.events.off('KEY_DOWN', this.onKeyDown);
|
||||||
|
this.manager = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
15
v3/src/input/keyboard/combo/KeyComboMatchEvent.js
Normal file
15
v3/src/input/keyboard/combo/KeyComboMatchEvent.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
var Event = require('../../../events/Event');
|
||||||
|
|
||||||
|
var KeyComboMatchEvent = function (keyCombo, keyboardEvent)
|
||||||
|
{
|
||||||
|
Event.call(this, 'KEY_COMBO_MATCH_EVENT');
|
||||||
|
|
||||||
|
this.target = keyCombo;
|
||||||
|
|
||||||
|
this.data = keyboardEvent;
|
||||||
|
};
|
||||||
|
|
||||||
|
KeyComboMatchEvent.prototype = Object.create(Event.prototype);
|
||||||
|
KeyComboMatchEvent.prototype.constructor = KeyComboMatchEvent;
|
||||||
|
|
||||||
|
module.exports = KeyComboMatchEvent;
|
12
v3/src/input/keyboard/combo/ResetKeyCombo.js
Normal file
12
v3/src/input/keyboard/combo/ResetKeyCombo.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
var ResetKeyCombo = function (combo)
|
||||||
|
{
|
||||||
|
combo.current = combo.keyCodes[0];
|
||||||
|
combo.index = 0;
|
||||||
|
combo.timeLastMatched = 0;
|
||||||
|
combo.matched = false;
|
||||||
|
combo.timeMatched = 0;
|
||||||
|
|
||||||
|
return combo;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = ResetKeyCombo;
|
Loading…
Add table
Reference in a new issue