Skip to content
This repository has been archived by the owner on Jul 13, 2020. It is now read-only.

A flexible, pausable alternative to setTimeout and setInterval for GameStartr Things.

License

Notifications You must be signed in to change notification settings

FullScreenShenanigans/TimeHandlr

 
 

Repository files navigation

TimeHandlr

Greenkeeper badge Build Status NPM version

Scheduling for dynamically repeating or synchronized events.

Like Lolex, but for one-time and repeating events in production code.

Usage

Constructor

import { TimeHandlr } from "timehandlr";

const timeHandler = new TimeHandlr();

addEvent

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Returns: An event with the given callback and time information.

Adds an event to be called once.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(
    () => console.log("Hello world!"),
    3);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

If args are provided, they're passed to the callback. This is similar to Function.call.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(
    console.log.bind(console),
    3,
    "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

addEventInterval

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • numRepeats: number | Function (optional): How many times to run the event (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Adds an event to be called multiple times.

const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(
    () => console.log("Hello world!"),
    3,
    2);

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

If args are provided, they're passed to the callback. This is similar to Function.call.

const timeHandler = new TimeHandlr();

timeHandler.addEventInterval(
    console.log.bind(console),
    3,
    "Hello world!");

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

timeHandler.advance();
timeHandler.advance();

// Hello world!
timeHandler.advance();

addEventIntervalSynched

Parameters:

  • callback: Function: Callback to run for the event.
  • timeDelay: number | Function (optional): How long from now to run the callback (by default, 1).
  • numRepeats: number | Function (optional): How many times to run the event (by default, 1).
  • ...args: any[]: Any additional arguments to pass to the callback.

Adds an event interval, waiting to start until it's in sync with the time delay.

This is useful for starting animations of objects intended to be animated in sync, like Goombas in Mario or flower scenery in Pokemon. Otherwise identical to addEventInterval.

cancelEvent

Parameters:

  • event: Object: Event to cancel.

Cancels an event created by one of the addEvent* methods.

const timeHandler = new TimeHandlr();

const event = timeHandler.addEvent(
    () => console.log("Hello world!"),
    3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelEvent(event);

timeHandler.advance();

cancelAllEvents

Cancels all events.

const timeHandler = new TimeHandlr();

timeHandler.addEvent(
    () => console.log("Hello world!"),
    3);

timeHandler.advance();
timeHandler.advance();

timeHandler.cancelAllEvents();

timeHandler.advance();

Development

After forking the repo from GitHub:

git clone https://github.com/<your-name-here>/TimeHandlr
cd TimeHandlr
npm install
npm run setup
npm run verify
  • npm run setup creates a few auto-generated setup files locally.
  • npm run verify builds, lints, and runs tests.

Building

npm run watch

Source files are written under src/ in TypeScript and compile in-place to JavaScript files. npm run watch will directly run the TypeScript compiler on source files in watch mode. Use it in the background while developing to keep the compiled files up-to-date.

Running Tests

npm run test

Tests are written in Mocha and Chai. Their files are written using alongside source files under src/ and named *.test.ts?. Whenever you add, remove, or rename a *.test.t* file under src/, watch will re-run npm run test:setup to regenerate the list of static test files in test/index.html. You can open that file in a browser to debug through the tests.

About

A flexible, pausable alternative to setTimeout and setInterval for GameStartr Things.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published