UNPKG

ts-game-engine

Version:

Simple WebGL game/render engine written in TypeScript

232 lines (231 loc) 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const BaseSystem_1 = require("../BaseSystem"); const Keys_1 = require("./Keys"); const gl_matrix_1 = require("gl-matrix"); var KeyState; (function (KeyState) { KeyState[KeyState["Up"] = 0] = "Up"; KeyState[KeyState["Down"] = 1] = "Down"; KeyState[KeyState["Held"] = 2] = "Held"; KeyState[KeyState["Released"] = 3] = "Released"; })(KeyState || (KeyState = {})); ; class InputSystem extends BaseSystem_1.BaseSystem { constructor(canvas) { super(); this.OnKeyDown = (ev) => { const index = this.KeyToIndex(ev.code); if (index < 0) { console.warn(`Key "${ev.code} is not implemented.`); return; } if (this.currentKeyStates[index] === KeyState.Held) return; this.currentKeyStates[index] = KeyState.Down; }; this.OnKeyUp = (ev) => { const index = this.KeyToIndex(ev.code); if (index < 0) { console.warn(`Key "${ev.code} is not implemented.`); return; } this.currentKeyStates[index] = KeyState.Released; }; this.OnMouseDown = (ev) => { const index = ev.button; if (index < 0 || index >= Keys_1.Keys.MOUSE_BUTTON_COUNT) { console.warn(`Mouse button "${index} is not implemented.`); return; } if (this.currentMouseStates[index] === KeyState.Held) return; this.currentMouseStates[index] = KeyState.Down; }; this.OnMouseUp = (ev) => { const index = ev.button; if (index < 0 || index >= Keys_1.Keys.MOUSE_BUTTON_COUNT) { console.warn(`Mouse button "${index} is not implemented.`); return; } this.currentMouseStates[index] = KeyState.Released; }; this.OnMouseMove = (ev) => { this.currentMousePosition[0] = ev.x; this.currentMousePosition[1] = ev.y; }; this.canvas = canvas; this.currentKeyStates = new Array(Keys_1.Keys.COUNT); this.previousKeyStates = new Array(Keys_1.Keys.COUNT); for (let k = 0; k < Keys_1.Keys.COUNT; k++) { this.currentKeyStates[k] = KeyState.Up; this.previousKeyStates[k] = KeyState.Up; } this.currentMouseStates = new Array(Keys_1.Keys.MOUSE_BUTTON_COUNT); this.previousMouseStates = new Array(Keys_1.Keys.MOUSE_BUTTON_COUNT); for (let m = 0; m < Keys_1.Keys.MOUSE_BUTTON_COUNT; m++) { this.currentMouseStates[m] = KeyState.Up; this.previousMouseStates[m] = KeyState.Up; } this.currentMousePosition = gl_matrix_1.vec2.create(); this.previousMousePosition = gl_matrix_1.vec2.create(); this.mouseDeltaMovement = gl_matrix_1.vec2.create(); document.addEventListener("keydown", this.OnKeyDown, false); document.addEventListener("keyup", this.OnKeyUp, false); this.canvas.addEventListener("mousedown", this.OnMouseDown, false); this.canvas.addEventListener("mouseup", this.OnMouseUp, false); this.canvas.addEventListener("mousemove", this.OnMouseMove, false); } get MousePosition() { return this.currentMousePosition; } get MouseDeltaMovement() { return this.mouseDeltaMovement; } Dispose() { document.removeEventListener("keydown", this.OnKeyDown, false); document.removeEventListener("keyup", this.OnKeyUp, false); this.canvas.removeEventListener("mousedown", this.OnMouseDown, false); this.canvas.removeEventListener("mouseup", this.OnMouseUp, false); this.canvas.removeEventListener("mousemove", this.OnMouseMove, false); } Update() { for (let k = 0; k < Keys_1.Keys.COUNT; k++) { if (this.currentKeyStates[k] === KeyState.Down && this.previousKeyStates[k] === KeyState.Down) this.currentKeyStates[k] = KeyState.Held; if (this.currentKeyStates[k] === KeyState.Released && this.previousKeyStates[k] === KeyState.Released) this.currentKeyStates[k] = KeyState.Up; this.previousKeyStates[k] = this.currentKeyStates[k]; } for (let m = 0; m < Keys_1.Keys.MOUSE_BUTTON_COUNT; m++) { if (this.currentMouseStates[m] === KeyState.Down && this.previousMouseStates[m] === KeyState.Down) this.currentMouseStates[m] = KeyState.Held; if (this.currentMouseStates[m] === KeyState.Released && this.previousMouseStates[m] === KeyState.Released) this.currentMouseStates[m] = KeyState.Up; this.previousMouseStates[m] = this.currentMouseStates[m]; } gl_matrix_1.vec2.subtract(this.mouseDeltaMovement, this.currentMousePosition, this.previousMousePosition); gl_matrix_1.vec2.copy(this.previousMousePosition, this.currentMousePosition); } GetKeyDown(key) { return this.currentKeyStates[this.KeyToIndex(key)] === KeyState.Down; } GetKeyUp(key) { return this.currentKeyStates[this.KeyToIndex(key)] === KeyState.Released; } GetKey(key) { return this.currentKeyStates[this.KeyToIndex(key)] === KeyState.Down || this.currentKeyStates[this.KeyToIndex(key)] === KeyState.Held; } GetMouseButtonDown(button) { return this.currentMouseStates[button] === KeyState.Down; } GetMouseButtonUp(button) { return this.currentMouseStates[button] === KeyState.Released; } GetMouseButton(button) { return this.currentMouseStates[button] === KeyState.Down || this.currentMouseStates[button] === KeyState.Held; } KeyToIndex(key) { switch (key) { default: return -1; case Keys_1.Keys.KEY_ESCAPE: return 0; case Keys_1.Keys.KEY_F1: return 1; case Keys_1.Keys.KEY_F2: return 2; case Keys_1.Keys.KEY_F3: return 3; case Keys_1.Keys.KEY_F4: return 4; case Keys_1.Keys.KEY_F5: return 5; case Keys_1.Keys.KEY_F6: return 6; case Keys_1.Keys.KEY_F7: return 7; case Keys_1.Keys.KEY_F8: return 8; case Keys_1.Keys.KEY_F9: return 9; case Keys_1.Keys.KEY_F10: return 10; case Keys_1.Keys.KEY_F11: return 11; case Keys_1.Keys.KEY_F12: return 12; case Keys_1.Keys.KEY_DIGIT_0: return 13; case Keys_1.Keys.KEY_DIGIT_1: return 14; case Keys_1.Keys.KEY_DIGIT_2: return 15; case Keys_1.Keys.KEY_DIGIT_3: return 16; case Keys_1.Keys.KEY_DIGIT_4: return 17; case Keys_1.Keys.KEY_DIGIT_5: return 18; case Keys_1.Keys.KEY_DIGIT_6: return 19; case Keys_1.Keys.KEY_DIGIT_7: return 20; case Keys_1.Keys.KEY_DIGIT_8: return 21; case Keys_1.Keys.KEY_DIGIT_9: return 22; case Keys_1.Keys.KEY_Q: return 23; case Keys_1.Keys.KEY_W: return 24; case Keys_1.Keys.KEY_E: return 25; case Keys_1.Keys.KEY_R: return 26; case Keys_1.Keys.KEY_T: return 27; case Keys_1.Keys.KEY_Y: return 28; case Keys_1.Keys.KEY_U: return 29; case Keys_1.Keys.KEY_I: return 30; case Keys_1.Keys.KEY_O: return 31; case Keys_1.Keys.KEY_P: return 32; case Keys_1.Keys.KEY_A: return 33; case Keys_1.Keys.KEY_S: return 34; case Keys_1.Keys.KEY_D: return 35; case Keys_1.Keys.KEY_F: return 36; case Keys_1.Keys.KEY_G: return 37; case Keys_1.Keys.KEY_H: return 38; case Keys_1.Keys.KEY_J: return 39; case Keys_1.Keys.KEY_K: return 40; case Keys_1.Keys.KEY_L: return 41; case Keys_1.Keys.KEY_Z: return 42; case Keys_1.Keys.KEY_X: return 43; case Keys_1.Keys.KEY_C: return 44; case Keys_1.Keys.KEY_V: return 45; case Keys_1.Keys.KEY_B: return 46; case Keys_1.Keys.KEY_N: return 47; case Keys_1.Keys.KEY_M: return 48; case Keys_1.Keys.KEY_MINUS: return 49; case Keys_1.Keys.KEY_EQUAL: return 50; case Keys_1.Keys.KEY_BACKSPACE: return 51; case Keys_1.Keys.KEY_TAB: return 52; case Keys_1.Keys.KEY_BRACKET_LEFT: return 53; case Keys_1.Keys.KEY_BRACKET_RIGHT: return 54; case Keys_1.Keys.KEY_ENTER: return 55; case Keys_1.Keys.KEY_CONTROL_LEFT: return 56; case Keys_1.Keys.KEY_CONTROL_RIGHT: return 57; case Keys_1.Keys.KEY_SEMICOLON: return 58; case Keys_1.Keys.KEY_QUOTE: return 59; case Keys_1.Keys.KEY_BACK_QUOTE: return 60; case Keys_1.Keys.KEY_SHIFT_LEFT: return 61; case Keys_1.Keys.KEY_SHIFT_RIGHT: return 62; case Keys_1.Keys.KEY_BACK_SLASH: return 63; case Keys_1.Keys.KEY_COMMA: return 64; case Keys_1.Keys.KEY_PERIOD: return 65; case Keys_1.Keys.KEY_SLASH: return 66; case Keys_1.Keys.KEY_ALT_LEFT: return 67; case Keys_1.Keys.KEY_ALT_RIGHT: return 68; case Keys_1.Keys.KEY_SPACE: return 69; case Keys_1.Keys.KEY_PRINT_SCREEN: return 70; case Keys_1.Keys.KEY_PAUSE: return 71; case Keys_1.Keys.KEY_CAPS_LOCK: return 72; case Keys_1.Keys.KEY_NUM_LOCK: return 73; case Keys_1.Keys.KEY_SCROLL_LOCK: return 74; case Keys_1.Keys.KEY_INSERT: return 75; case Keys_1.Keys.KEY_HOME: return 76; case Keys_1.Keys.KEY_PAGE_UP: return 77; case Keys_1.Keys.KEY_DELETE: return 78; case Keys_1.Keys.KEY_END: return 79; case Keys_1.Keys.KEY_PAGE_DOWN: return 80; case Keys_1.Keys.KEY_ARROW_UP: return 81; case Keys_1.Keys.KEY_ARROW_LEFT: return 82; case Keys_1.Keys.KEY_ARROW_RIGHT: return 83; case Keys_1.Keys.KEY_ARROW_DOWN: return 84; case Keys_1.Keys.KEY_NUMPAD_0: return 85; case Keys_1.Keys.KEY_NUMPAD_1: return 86; case Keys_1.Keys.KEY_NUMPAD_2: return 87; case Keys_1.Keys.KEY_NUMPAD_3: return 88; case Keys_1.Keys.KEY_NUMPAD_4: return 89; case Keys_1.Keys.KEY_NUMPAD_5: return 90; case Keys_1.Keys.KEY_NUMPAD_6: return 91; case Keys_1.Keys.KEY_NUMPAD_7: return 92; case Keys_1.Keys.KEY_NUMPAD_8: return 93; case Keys_1.Keys.KEY_NUMPAD_9: return 94; case Keys_1.Keys.KEY_NUMPAD_ADD: return 95; case Keys_1.Keys.KEY_NUMPAD_SUBTRACT: return 96; case Keys_1.Keys.KEY_NUMPAD_MULTIPLY: return 97; case Keys_1.Keys.KEY_NUMPAD_DIVIDE: return 98; case Keys_1.Keys.KEY_NUMPAD_DECIMAL: return 99; case Keys_1.Keys.KEY_NUMPAD_ENTER: return 100; } } } exports.InputSystem = InputSystem;