rgui
Version:
RPG Maker MV GUI framework.
242 lines (226 loc) • 4.68 kB
JavaScript
/**
* 输入模块。
*
* @namespace RGUI.Input
*/
const Input = {
keyName: {
'MouseLeft': 0x01,
'MouseRight': 0x02,
'MouseCenter': 0x04,
'Backspace': 0x08,
'Tab': 0x09,
'Enter': 0x0D,
'Shift': 0x10,
'Control': 0x11,
'Alt': 0x12,
'CapsLock': 0x14, //CAPS LOCK键
'Escape': 0x1B,
'Space': 0x20,
'PageUp': 0x21, //PAGE UP键
'PageDown': 0x22, //PAGE DOWN键
'Home': 0x24,
'ArrowLeft': 0x25, //LEFT ARROW键
'ArrowUp': 0x26,
'ArrowRight': 0x27,
'ArrowDown': 0x28,
'Insert': 0x2D,
'Delete': 0x2E,
'NumLock': 0x90, //NUMLOCK键
'ScrollLock': 0x91, //SCROLL LOCK键
'0': 0x30,
'1': 0x31,
'2': 0x32,
'3': 0x33,
'4': 0x34,
'5': 0x35,
'6': 0x36,
'7': 0x37,
'8': 0x38,
'9': 0x39,
'A': 0x41,
'B': 0x42,
'C': 0x43,
'D': 0x44,
'E': 0x45,
'F': 0x46,
'G': 0x47,
'H': 0x48,
'I': 0x49,
'J': 0x4A,
'K': 0x4B,
'L': 0x4C,
'M': 0x4D,
'N': 0x4E,
'O': 0x4F,
'P': 0x50,
'Q': 0x51,
'R': 0x52,
'S': 0x53,
'T': 0x54,
'U': 0x55,
'V': 0x56,
'W': 0x57,
'X': 0x58,
'Y': 0x59,
'Z': 0x5A,
'Num0': 0x60,
'Num1': 0x61,
'Num2': 0x62,
'Num3': 0x63,
'Num4': 0x64,
'Num5': 0x65,
'Num6': 0x66,
'Num7': 0x67,
'Num8': 0x68,
'Num9': 0x69,
'Nul': 0x6A, //乘号键
'Add': 0x6B, //加号键
'Sep': 0x6C, //分隔符键
'Sub': 0x6D, //减号键
'Dec': 0x6E, //小数点键
'Div': 0x6F, //除号键
'F1': 0x70,
'F2': 0x71,
'F3': 0x72,
'F4': 0x73,
'F5': 0x74,
'F6': 0x75,
'F7': 0x76,
'F8': 0x77,
'F9': 0x78,
'F10': 0x79,
'F11': 0x7A,
'F12': 0x7B
},
/**
* 初始化 Input 模块。
* @memberof RGUI.Input
*/
init: function () {
this._mouseScroll = 0;
this.keyStauts = {};
this._mouseKey = [
'MouseLeft',
'MouseMiddle',
'MouseRight'
];
this._x = 0;
this._y = 0;
this._setupEventHandlers();
},
_setupEventHandlers: function () {
let self = this;
document.addEventListener('mousemove', (event)=>{
self._x = event.clientX;
self._y = event.clientY;
});
document.addEventListener('mousewheel', (event)=>{
self._mouseScroll = event.wheelDelta > 0 ? 1 : -1;
});
document.addEventListener('mousedown', (event)=>{
self.keyStauts[event.keyCode] = 1
});
document.addEventListener('mouseup', (event)=>{
self.keyStauts[event.keyCode] = 0
});
document.addEventListener('keydown', (event)=>{
self.keyStauts[event.keyCode] = 1;
});
document.addEventListener('keyup', (event)=>{
self.keyStauts[event.keyCode] = 0
});
},
/**
* 每帧更新。
* @memberof RGUI.Input
*/
update: function () {
this._mouseScroll = 0;
},
/**
* 清除。
* @memberof RGUI.Input
*/
clear: function () {
this._mouseScroll = 0;
this._x = 0;
this._y = 0;
this.keyStauts = {};
},
/**
* 判断键是否按下。
* @memberof RGUI.Input
* @param {String} keyName - 欲判断的键名。
* @returns {Boolean}
*/
keyDown: function (keyName) {
if(!this.keyStauts[this.keyName[keyName]]) return false;
return this.keyStauts[this.keyName[keyName]] == 1
},
/**
* 判断键是否按住。
* @param {String} keyName - 欲判断的键名。
* @memberof RGUI.Input
* @returns {Boolean}
*/
keyPress: function (keyName) {
if(!this.keyStauts[this.keyName[keyName]]) return false;
return this.keyStauts[this.keyName[keyName]] == -1
},
/**
* 判断键是否弹起。
* @param {String} keyName - 欲判断的键名。
* @memberof RGUI.Input
* @returns {Boolean}
*/
keyUp: function (keyName) {
if(!this.keyStauts[this.keyName[keyName]]) return true;
return this.keyStauts[this.keyName[keyName]] == 0
},
/**
* 获取鼠标当前坐标。
* @memberof RGUI.Input
* @returns {Object} - {x: Number, y: Number}
*/
mousePos : function () {
return {'x': this._x, 'y': this._y}
}
};
/**
* 鼠标当前坐标 X 值。
*
* @name RGUI.Input.x
* @type {Number}
*/
Object.defineProperty(Input, 'x', {
get() {
return this._x
}
}
);
/**
* 鼠标当前坐标 Y 值。
*
* @name RGUI.Input.y
* @type {Number}
*/
Object.defineProperty(Input, 'y', {
get() {
return this._y
}
}
);
/**
* 鼠标滚轮值。
*
* @name RGUI.Input.mouseScroll
* @type {Number}
*/
Object.defineProperty(Input, 'mouseScroll', {
get() {
return this._mouseScroll
}
}
);
module.exports = Input;