@peasy-lib/peasy-input v0.2.0
Peasy Input
This is the repository for Peasy Input, a small-ish and relatively easy to use input library.
Introduction
Peasy Input provides input handling that maps keys, clicks and taps to actions and let's the application be action based rather than tied to specific input device events. It supports both a callback and a query usage. In both usages, both repeating and non-repeating actions can be specified.
First look
Callback usage:
import { Input } from 'peasy-input';
const mapping = Input.map(
{
ArrowLeft: 'walk-left',
ArrowRight: 'walk-right',
Escape: { action: 'close', repeat: false },
' ': { action: 'interact', repeat: false },
'Shift+ArrowLeft': 'run-left',
'Shift+ArrowRight': 'run-right',
},
(action: string, doing: boolean) => {
if (doing) {
switch (action) {
case 'interact':
if (modal == null) {
openModal();
} else {
closeModal();
}
break;
case 'close':
if (modal != null) {
closeModal();
}
break;
}
moveActions(action);
}
}
);
function openModal() {
// Code to open modal
modalKeys = Keyboard.map({
ArrowLeft: { action: 'modal-left', repeat: false },
ArrowRight: { action: 'modal-right', repeat: false },
' ': { action: 'select', repeat: false },
},
(action: string, doing: boolean) => {
if (doing) {
if (action === 'select') {
closeModal();
}
}
});
}
function closeModal() {
// Code to close modal
modalKeys.unmap();
modalKeys = null;
}Query usage:
const mapping = Input.map({
ArrowLeft: 'walk-left',
ArrowRight: 'walk-right',
});
const tick = () => {
if (Input.is('walk-left')) player.x -= player.speed;
if (Input.is('walk-right')) player.x += player.speed;
requestAnimationFrame(tick);
}
requestAnimationFrame(tick);Getting started
If you've got a build process and are using npm, install Peasy Input with
npm i peasy-inputand import it into whichever files you want to use it
import { Input } from 'peasy-input';If you don't have a build process or don't want to install it, use a script tag
<script src="https://unpkg.com/peasy-input">to make Input available.
Features and syntax
Control updates
Peasy Input will by default use requestAnimationFrame for notifications and repeats. By calling Input.initialize before any other Input method a number can be provided to set notifications and repeats per second and false to prevent Peasy Input from doing any notifications at all.
Input.initialize(30, false);
const tick = () => {
doSomething();
Input.update();
doSomethingElse();
requestAnimationFrame(tick);
}
requestAnimationFrame(tick);Development and contributing
If you're interested in contributing, please see the development guidelines.
3 years ago