1.0.1 • Published 11 months ago

@h4v0c/input v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

input

A very simple yet intuitive user input manager.

Usage:

import { Input, Key, MouseButton } from '@h4v0c/input';

const input = new Input();

input.on('key_down', (evt /* KeyEvent */) => console.debug('key_down:', evt));
input.on('key_pressed', (evt /* KeyEvent */) => console.debug('key_pressed:', evt));
input.on('key_up', (evt /* KeyEvent */) => console.debug('key_up:', evt));
input.on('button_down', (evt /* MouseButtonEvent */) => console.debug('button_down:', evt));
input.on('button_clicked', (evt /* MouseButtonEvent */) => console.debug('button_clicked:', evt));
input.on('button_up', (evt /* MouseButtonEvent */) => console.debug('button_up:', evt));
input.on('mouse_move', (evt /* MouseMoveEvent */) => console.debug('mouse_move:', evt));
input.on('mouse_wheel', (evt /* MouseWheelEvent */) => console.debug('mouse_wheel:', evt));

let stop = false;

function loop(time) {
    if (input.isKeyDown(Key.Escape)) {
        stop = true;
        console.debug('loop stopped, stop value:', stop);
    }

    if (input.isKeyDown(Key.Space)) console.debug('SPACE is DOWN');
    if (input.isButtonDown(MouseButton.LEFT)) console.debug('LEFT mouse button is DOWN');

    const arrowDownValue = input.getKeyDownValue(Key.ArrowDown);

    if (arrowDownValue) console.debug('arrowDownValue:', arrowDownValue);

    if (!stop) {
        requestAnimationFrame(loop);
    }
}

requestAnimationFrame(loop);

Output:

key_down: {state: 1, key: 34, domEvent: KeyboardEvent}
key_pressed: {state: 0, key: 34, domEvent: KeyboardEvent}
key_up: {state: 0, key: 34, domEvent: KeyboardEvent}

button_down: {state: 1, button: 0, domEvent: MouseEvent}
button_clicked: {state: 0, button: 0, domEvent: MouseEvent}
button_up: {state: 0, button: 0, domEvent: MouseEvent}

mouse_move: { position: Float32Array(2), delta: Float32Array(2), domEvent: MouseEvent }
mouse_wheel: { delta: Float32Array(2), domEvent: WheelEvent }

arrowDownValue: 1
LEFT mouse button is DOWN
SPACE is DOWN

loop stopped, stop value: true

Note: In the output above, Float32Array refers to the gl-matrix library vec2 object, where it's element values are essentially: [x, y]. And domEvent is the actual DOM event emitted by the DOM.

The key_down event supresses subsequent key_down events if the key is held down.

The key_pressed and button_clicked events only get emitted when a key_up or button_up event is emitted within the Input.inputThreshold (milliseconds, default: 200) since the last key_down or button_down events have emitted.

To clarify: If a `key_down` event fires, we store the time. When the `key_up` event fires, we check to see if the time between the two events is less than or equal to the number of milliseconds stored in `Input.inputThreshold`.

`key_pressed` or `button_clicked` will fire before `key_up` or `button_up`.

KeyMaps: This is a feature that will be coming soon...

1.0.1

11 months ago

1.0.0

12 months ago