gamedevjs
game development toolkit
A collection of common components which are widely used in game development:
- Scheduler
- Finite State Machine
- Object Pool
- Event Manager
(other components will be published and documented soon)
This project is evolving and need your feedback, please create Issue
Table of contents
Installation
$ npm install --save gamedevjs
Usage
Node
var gamedev = gamedev;
ES6
// ES6;
Browser CDN: https://cdn.jsdelivr.net/npm/gamedevjs
Scheduler
Creation
Schedule tasks at specific times
var scheduler = gamedevscheduler; schedulerstart;
Schedule sequence tasks
var scheduler = gamedevscheduler; // start scheduler with delay timeschedulerstart200;
Repeat
// start scheduler with no delay time, repeat 3 timesschedulerstart0 3; // start scheduler with no delay time, repeat foreverschedulerstart0 -1; // start scheduler with 200ms delay time, repeat 2 times// and delay 200ms between each scheduled timesschedulerstart200 2;
Manipulation
Push task at specific time
...// push and schedule addional taskscheduler // or we can push task when scheduler is running// and make sure scheduler has not reached new schedule time;
Stop scheduler will terminate all running tasks
scheduler;
Finite State Machine
Inspired by javascript-state-machine (author: jakesgordon)
Creation
NOTICE: event name must NOT be "any"
var fsm = gamedevfsm; console; // "stand"fsmevents;console; // "walk"
Manipulation
...fsm; fsmevents;
Event Handler
Event execution orders:
- beforeany - fired before any event
- beforeEVENT - fired before the event
- leaveSTATE - fired when leaving the old state (fsm.current is still old state)
- leaveany - fired when leaving any old state (fsm.current is still old state)
- enterany - fired when entering any new state (fsm.current is new state)
- enterSTATE - fired when entering the new state (fsm.current is new state)
- afterEVENT - fired after the event
- afterany - fired after any event
...fsmevents { console;} fsmevents { console;} fsmevents { console; console; // previous state console; // current state} fsmevents { console;} // or use registerEvent to pass this objectfsm; fsmevents;
Cancel Event Handler
var EventStatus = EventStatus; ...fsmevents { console; return EventStatusCANCEL;} fsmevents;console; // still be "stand"
Async Event Handler
var EventStatus = EventStatus; ...fsmevents { console; ; return EventStatusASYNC;} fsmevents; console; // still be "stand" ;
Object Pool
Creation
Item List
Predefine a list of items for object pool.
var gamedev = gamedev; var pool = gamedevpool;
Sample Item
... var pool = gamedevpool;
Combine
Predefined items are added to the pool first, then sample items will be added later.
var pool = gamedevpool;
Manipulation
Get
... // get available itemitem = pool; // if pool is empty, it will clone sampleItem// if sampleItem is undefined, item2 is undefined as wellitem2 = pool;
Return
...// return item to the pool and trigger onreturn eventpool;
Push
...// push item to the pool and trigger onpush eventpool;
Clear
Clear all items
...poolclear;
Events
- onpush: trigger when item is pushed to pool (init pool or push new items to pool)
- onget: trigger when item is retrieved from pool (get available item)
- onreturn: trigger when item is returned to pool (return item to pool)
pool = gamedevpool;
Event Manager
Creation
var gamedev = gamedev;var EventManager = EventManager; // global event managervar event = gamedevevent; // or create new instancevar event = ;
Manipulation
Common usage
...let isHit = false;let heath = 1200; gamedevevent; gamedevevent;console; // 700 gamedevevent; gamedevevent;console; // 700
Register Once
let isHit = false;let heath = 1200; gamedevevent; gamedevevent;console; // 700gamedevevent;console; // 700
Register Replace
let isHit = false;let heath = 1200; gamedevevent; gamedevevent; // set third parameter to true gamedevevent;console; // 200
Multiple Register
let isHit = false;let heath = 1200; gamedevevent;gamedevevent; gamedevevent;console; // 500
Unregister list
gamedevevent;
Unregister All
gamedevevent;
License
ISC ©