liblooper
Version:
Looper implementation for use in conjonction with the HJS-MESSAGE messaging API. This is the browser version of the
110 lines (84 loc) • 3.06 kB
Markdown
# LIBLOOPER
> Looper implementation for use in conjonction with the HJS-MESSAGE messaging API. This is the browser version of the
looper.
Looper classes: Looper, MessageLooper.
## Installation
Node:
```sh
npm install liblooper --save
```
## Usage
The **Looper** is used to run messages synchronized with animation frames. **requestAnimationFrame** by default
do not have a message loop associated with them; to create one, call **Looper.createLoopHandler** in the
script that is to run the loop.
Most interaction with a message loop is through the **MessageLooper** that is a subclass class of **MessageHandler**.
Your can create any number of **MessageLooper**'s but only one loop is running in the entire application. But it's
recommanded to use only one global instance of **Looper**.
###### Create a MessageLooper
```javascript
import {Looper} from 'liblooper';
// this create an instanceof MessageHandler that run in the loop
let ML = Looper.createLoopHandler({
fps: 40 /* An optional FPS is accepted (60 is default) */,
quitAllowed: false /* An optional quit flag is accepted (true is default) */,
handleMessage(msg) {
// enter frame here
// handle messages interactions
return true;
},
handleRender(interpolation) {
// render frame here
// handle drawing on canvas for ex.
},
handleExit(fps, panic=false) {
// exit frame here
// clean code for example
}
});
```
###### Pause/Resume/Exit from a loop
```javascript
import {Looper} from 'liblooper';
const START_CMD = 0xffddcc;
const PAUSE_CMD = 0xffddcd;
const RESUME_CMD = 0xffddce;
const EXIT_CMD = 0xffddde;
// this create an instance of MessageLooper that run in the loop
// All parameters accepted by a MessageHandler are accepted by MessageLooper's
let ML = Looper.createLoopHandler({
handleMessage(msg) {
let what = msg.what;
switch(what) {
case START_MSG:
this.sendEmptyMessage(PAUSE_CMD);
break;
case PAUSE_CMD:
this.pause();
// now messages are sending only with the message queue
// handle render and handle exit are no more called
this.sendEmptyMessage(RESUME_CMD);
break;
case RESUME_CMD:
this.resume();
// now messages are sending throw the loop
// handle render and handle exit are called
this.sendEmptyMessage(EXIT_CMD);
break;
case EXIT_CMD:
this.exit();
break;
}
return true;
},
handleRender(interpolation) {
console.log(interpolation);
},
handleExit(fps, panic=false) {
console.log(fps);
}
});
ML.sendEmptyMessage(START_MSG);
```
## Contacts
[Aime - abiendo@gmail.com](abiendo@gmail.com)
Distributed under the MIT license. See [``LICENSE``](./LICENSE.md) for more information.