0.2.0 • Published 1 year ago

@peasy-lib/peasy-input v0.2.0

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
1 year ago

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-input

and 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.