Skip to content

Instantly share code, notes, and snippets.

@Darksecond
Created October 23, 2018 13:35
Show Gist options
  • Select an option

  • Save Darksecond/05a685431d22f3c833ef86f69d5080f8 to your computer and use it in GitHub Desktop.

Select an option

Save Darksecond/05a685431d22f3c833ef86f69d5080f8 to your computer and use it in GitHub Desktop.

Revisions

  1. Darksecond created this gist Oct 23, 2018.
    15 changes: 15 additions & 0 deletions constants.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,15 @@
    export const KEY_TAB = 9;
    export const KEY_SHIFT = 16;
    export const KEY_CONTROL = 17;
    export const KEY_ALT = 18;
    export const KEY_SPACE = 32;
    export const KEY_LEFT = 37;
    export const KEY_UP = 38;
    export const KEY_RIGHT = 39;
    export const KEY_DOWN = 40;
    export const KEY_E = 69;
    export const KEY_W = 87;
    export const KEY_A = 65;
    export const KEY_D = 68;
    export const KEY_Q = 81;
    export const KEY_S = 83;
    46 changes: 46 additions & 0 deletions index.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@

    // False -> Up, True -> Down
    const pressedKeys: { [key:number]: boolean } = {};

    const mappedKeys: { [from: number]: /*to*/ number} = {};

    document.addEventListener("keydown", (e: KeyboardEvent)=>{
    let keyCode = mappedKeys[e.keyCode] || e.keyCode;
    if(pressedKeys[keyCode] !== undefined) {
    e.preventDefault();
    pressedKeys[keyCode] = true;
    }
    });

    document.addEventListener("keyup", (e: KeyboardEvent) => {
    let keyCode = mappedKeys[e.keyCode] || e.keyCode;
    if (pressedKeys[keyCode] !== undefined) {
    e.preventDefault();
    pressedKeys[keyCode] = false;
    }
    });


    export function register(...keys: number[]) {
    for (let key of keys) {
    pressedKeys[key] = false;
    }
    }

    export function deregister(...keys: number[]) {
    for(let key of keys) {
    delete pressedKeys[key];
    }
    }

    export function map(from: number, to: number) {
    mappedKeys[from] = to;
    }

    export function unmap(from: number) {
    delete mappedKeys[from];
    }

    export function isDown(key: number): boolean {
    return pressedKeys[key] || false;
    }