A universal input manager for web games and interactive art. Built in Typescript. Loosely inspired by Unity's Input System. Needs a better name.
Built-in support for the following device types:
- Gamepad
- Keyboard
- Pointer (mouse, touch, pen)
- On-screen virtual stick
Install via npm.
npm install @brianchirls/game-input
And import each class individually
import Gamepad from '@brianchirls/game-input/devices/Gamepad';
import Action from '@brianchirls/game-input/Action';
Or load directly from CDN
<script src="https://unpkg.com/@brianchirls/game-input"></script>
And access classes on the global GameInput
object.
const myGamepad = new GameInput.Gamepad();
import Gamepad from '@brianchirls/game-input/devices/Gamepad';
import Keyboard from '@brianchirls/game-input/devices/Keyboard';
import DPadComposite from '@brianchirls/game-input/controls/DPadComposite';
import Action from '@brianchirls/game-input/Action';
/**
* devices
*/
const gamepad = new Gamepad();
const keyboard = new Keyboard();
/**
* get controls from each device
*/
const leftStick = gamepad.getControl('leftStick');
// It takes four keys to go in four directions
const kbdWASD = new DPadComposite({
up: kbd.getControl('KeyW'),
left: kbd.getControl('KeyA'),
down: kbd.getControl('KeyS'),
right: kbd.getControl('KeyD')
});
/**
* Combine controls into actions.
* The action will respond to whichever control is used.
*/
const moveAction = new Action({
bindings: [
leftStick,
kbdWASD
]
});
/**
* Access action values inside update loop.
*/
function update() {
// gamepad is a polling device and won't work unless
// we update on every frame
gamepad.update();
const [x, y] = moveAction.value;
// ... game logic goes here ...
requestAnimationFrame(update);
}
update();
MIT License © Brian Chirls