diff --git a/data/src/emulator.js b/data/src/emulator.js index 4b05a4d..0eef65f 100644 --- a/data/src/emulator.js +++ b/data/src/emulator.js @@ -89,7 +89,6 @@ class EmulatorJS { } return options[core] || core; } - extensions = [] createElement(type) { return document.createElement(type); } @@ -225,6 +224,8 @@ class EmulatorJS { } constructor(element, config) { this.ejs_version = "4.0.13-beta"; + this.extensions = []; + this.initControlVars(); this.debug = (window.EJS_DEBUG_XX === true); if (this.debug || (window.location && ['localhost', '127.0.0.1'].includes(location.hostname))) this.checkForUpdates(); this.netplayEnabled = (window.EJS_DEBUG_XX === true) && (window.EJS_EXPERIMENTAL_NETPLAY === true); @@ -397,12 +398,13 @@ class EmulatorJS { this.setupAds(this.config.adUrl, this.config.adSize[0], this.config.adSize[1]); } } - functions = {}; on(event, func) { + if (!this.functions) this.functions = {}; if (!Array.isArray(this.functions[event])) this.functions[event] = []; this.functions[event].push(func); } callEvent(event, data) { + if (!this.functions) this.functions = {}; if (!Array.isArray(this.functions[event])) return 0; this.functions[event].forEach(e => e(data)); return this.functions[event].length; @@ -2773,224 +2775,225 @@ class EmulatorJS { this.controlMenu.appendChild(popup); } - defaultControllers = { - 0: { + initControlVars() { + this.defaultControllers = { 0: { - 'value': 'x', - 'value2': 'BUTTON_2' + 0: { + 'value': 'x', + 'value2': 'BUTTON_2' + }, + 1: { + 'value': 's', + 'value2': 'BUTTON_4' + }, + 2: { + 'value': 'v', + 'value2': 'SELECT' + }, + 3: { + 'value': 'enter', + 'value2': 'START' + }, + 4: { + 'value': 'up arrow', + 'value2': 'DPAD_UP' + }, + 5: { + 'value': 'down arrow', + 'value2': 'DPAD_DOWN' + }, + 6: { + 'value': 'left arrow', + 'value2': 'DPAD_LEFT' + }, + 7: { + 'value': 'right arrow', + 'value2': 'DPAD_RIGHT' + }, + 8: { + 'value': 'z', + 'value2': 'BUTTON_1' + }, + 9: { + 'value': 'a', + 'value2': 'BUTTON_3' + }, + 10: { + 'value': 'q', + 'value2': 'LEFT_TOP_SHOULDER' + }, + 11: { + 'value': 'e', + 'value2': 'RIGHT_TOP_SHOULDER' + }, + 12: { + 'value': 'tab', + 'value2': 'LEFT_BOTTOM_SHOULDER' + }, + 13: { + 'value': 'r', + 'value2': 'RIGHT_BOTTOM_SHOULDER' + }, + 14: { + 'value': '', + 'value2': 'LEFT_STICK', + }, + 15: { + 'value': '', + 'value2': 'RIGHT_STICK', + }, + 16: { + 'value': 'h', + 'value2': 'LEFT_STICK_X:+1' + }, + 17: { + 'value': 'f', + 'value2': 'LEFT_STICK_X:-1' + }, + 18: { + 'value': 'g', + 'value2': 'LEFT_STICK_Y:+1' + }, + 19: { + 'value': 't', + 'value2': 'LEFT_STICK_Y:-1' + }, + 20: { + 'value': 'l', + 'value2': 'RIGHT_STICK_X:+1' + }, + 21: { + 'value': 'j', + 'value2': 'RIGHT_STICK_X:-1' + }, + 22: { + 'value': 'k', + 'value2': 'RIGHT_STICK_Y:+1' + }, + 23: { + 'value': 'i', + 'value2': 'RIGHT_STICK_Y:-1' + }, + 24: { + 'value': '1' + }, + 25: { + 'value': '2' + }, + 26: { + 'value': '3' + }, + 27: {}, + 28: {}, + 29: {}, }, - 1: { - 'value': 's', - 'value2': 'BUTTON_4' - }, - 2: { - 'value': 'v', - 'value2': 'SELECT' - }, - 3: { - 'value': 'enter', - 'value2': 'START' - }, - 4: { - 'value': 'up arrow', - 'value2': 'DPAD_UP' - }, - 5: { - 'value': 'down arrow', - 'value2': 'DPAD_DOWN' - }, - 6: { - 'value': 'left arrow', - 'value2': 'DPAD_LEFT' - }, - 7: { - 'value': 'right arrow', - 'value2': 'DPAD_RIGHT' - }, - 8: { - 'value': 'z', - 'value2': 'BUTTON_1' - }, - 9: { - 'value': 'a', - 'value2': 'BUTTON_3' - }, - 10: { - 'value': 'q', - 'value2': 'LEFT_TOP_SHOULDER' - }, - 11: { - 'value': 'e', - 'value2': 'RIGHT_TOP_SHOULDER' - }, - 12: { - 'value': 'tab', - 'value2': 'LEFT_BOTTOM_SHOULDER' - }, - 13: { - 'value': 'r', - 'value2': 'RIGHT_BOTTOM_SHOULDER' - }, - 14: { - 'value': '', - 'value2': 'LEFT_STICK', - }, - 15: { - 'value': '', - 'value2': 'RIGHT_STICK', - }, - 16: { - 'value': 'h', - 'value2': 'LEFT_STICK_X:+1' - }, - 17: { - 'value': 'f', - 'value2': 'LEFT_STICK_X:-1' - }, - 18: { - 'value': 'g', - 'value2': 'LEFT_STICK_Y:+1' - }, - 19: { - 'value': 't', - 'value2': 'LEFT_STICK_Y:-1' - }, - 20: { - 'value': 'l', - 'value2': 'RIGHT_STICK_X:+1' - }, - 21: { - 'value': 'j', - 'value2': 'RIGHT_STICK_X:-1' - }, - 22: { - 'value': 'k', - 'value2': 'RIGHT_STICK_Y:+1' - }, - 23: { - 'value': 'i', - 'value2': 'RIGHT_STICK_Y:-1' - }, - 24: { - 'value': '1' - }, - 25: { - 'value': '2' - }, - 26: { - 'value': '3' - }, - 27: {}, - 28: {}, - 29: {}, - }, - 1: {}, - 2: {}, - 3: {} + 1: {}, + 2: {}, + 3: {} + } + this.keyMap = { + 0: '', + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 16: 'shift', + 17: 'ctrl', + 18: 'alt', + 19: 'pause/break', + 20: 'caps lock', + 27: 'escape', + 32: 'space', + 33: 'page up', + 34: 'page down', + 35: 'end', + 36: 'home', + 37: 'left arrow', + 38: 'up arrow', + 39: 'right arrow', + 40: 'down arrow', + 45: 'insert', + 46: 'delete', + 48: '0', + 49: '1', + 50: '2', + 51: '3', + 52: '4', + 53: '5', + 54: '6', + 55: '7', + 56: '8', + 57: '9', + 65: 'a', + 66: 'b', + 67: 'c', + 68: 'd', + 69: 'e', + 70: 'f', + 71: 'g', + 72: 'h', + 73: 'i', + 74: 'j', + 75: 'k', + 76: 'l', + 77: 'm', + 78: 'n', + 79: 'o', + 80: 'p', + 81: 'q', + 82: 'r', + 83: 's', + 84: 't', + 85: 'u', + 86: 'v', + 87: 'w', + 88: 'x', + 89: 'y', + 90: 'z', + 91: 'left window key', + 92: 'right window key', + 93: 'select key', + 96: 'numpad 0', + 97: 'numpad 1', + 98: 'numpad 2', + 99: 'numpad 3', + 100: 'numpad 4', + 101: 'numpad 5', + 102: 'numpad 6', + 103: 'numpad 7', + 104: 'numpad 8', + 105: 'numpad 9', + 106: 'multiply', + 107: 'add', + 109: 'subtract', + 110: 'decimal point', + 111: 'divide', + 112: 'f1', + 113: 'f2', + 114: 'f3', + 115: 'f4', + 116: 'f5', + 117: 'f6', + 118: 'f7', + 119: 'f8', + 120: 'f9', + 121: 'f10', + 122: 'f11', + 123: 'f12', + 144: 'num lock', + 145: 'scroll lock', + 186: 'semi-colon', + 187: 'equal sign', + 188: 'comma', + 189: 'dash', + 190: 'period', + 191: 'forward slash', + 192: 'grave accent', + 219: 'open bracket', + 220: 'back slash', + 221: 'close braket', + 222: 'single quote' + } } - keyMap = { - 0: '', - 8: 'backspace', - 9: 'tab', - 13: 'enter', - 16: 'shift', - 17: 'ctrl', - 18: 'alt', - 19: 'pause/break', - 20: 'caps lock', - 27: 'escape', - 32: 'space', - 33: 'page up', - 34: 'page down', - 35: 'end', - 36: 'home', - 37: 'left arrow', - 38: 'up arrow', - 39: 'right arrow', - 40: 'down arrow', - 45: 'insert', - 46: 'delete', - 48: '0', - 49: '1', - 50: '2', - 51: '3', - 52: '4', - 53: '5', - 54: '6', - 55: '7', - 56: '8', - 57: '9', - 65: 'a', - 66: 'b', - 67: 'c', - 68: 'd', - 69: 'e', - 70: 'f', - 71: 'g', - 72: 'h', - 73: 'i', - 74: 'j', - 75: 'k', - 76: 'l', - 77: 'm', - 78: 'n', - 79: 'o', - 80: 'p', - 81: 'q', - 82: 'r', - 83: 's', - 84: 't', - 85: 'u', - 86: 'v', - 87: 'w', - 88: 'x', - 89: 'y', - 90: 'z', - 91: 'left window key', - 92: 'right window key', - 93: 'select key', - 96: 'numpad 0', - 97: 'numpad 1', - 98: 'numpad 2', - 99: 'numpad 3', - 100: 'numpad 4', - 101: 'numpad 5', - 102: 'numpad 6', - 103: 'numpad 7', - 104: 'numpad 8', - 105: 'numpad 9', - 106: 'multiply', - 107: 'add', - 109: 'subtract', - 110: 'decimal point', - 111: 'divide', - 112: 'f1', - 113: 'f2', - 114: 'f3', - 115: 'f4', - 116: 'f5', - 117: 'f6', - 118: 'f7', - 119: 'f8', - 120: 'f9', - 121: 'f10', - 122: 'f11', - 123: 'f12', - 144: 'num lock', - 145: 'scroll lock', - 186: 'semi-colon', - 187: 'equal sign', - 188: 'comma', - 189: 'dash', - 190: 'period', - 191: 'forward slash', - 192: 'grave accent', - 219: 'open bracket', - 220: 'back slash', - 221: 'close braket', - 222: 'single quote' - } - controls; setupKeys() { for (let i=0; i<4; i++) { for (let j=0; j<30; j++) { diff --git a/data/src/gamepad.js b/data/src/gamepad.js index 6c13644..9a1d82c 100644 --- a/data/src/gamepad.js +++ b/data/src/gamepad.js @@ -1,7 +1,4 @@ class GamepadHandler { - gamepads; - timeout; - listeners; constructor() { this.buttonLabels = { 0: 'BUTTON_1',