Skip to content

Instantly share code, notes, and snippets.

@chrisdickinson
Last active December 10, 2015 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisdickinson/0c57ff97169fdf630980 to your computer and use it in GitHub Desktop.
Save chrisdickinson/0c57ff97169fdf630980 to your computer and use it in GitHub Desktop.
var d = require('domnode-dom')
, actionable = require('actionable')
, through = require('through')
, raf = require('raf')
var actions = actionable({
forward: Boolean
, jump: Boolean
, back: Boolean
, left: Boolean
, right: Boolean
, nextweapon: Event
})
var gamepadBindings = actions.binding({
forward: ['joystick-up', 'dpad-up']
, backward: ['joystick-down', 'dpad-down']
})
, keyboardBindings = actions.binding({
forward: 'W'
, backward: 'S'
, jump: '<Space>'
, crawl: '<Ctrl>'
})
if(game.wantsKeyboard) {
d.createReadStream(document.body, 'keydown')
.pipe(through(function(event) { return {up: this.queue(event.keyCode)} }))
.pipe(keyboardBindings)
d.createReadStream(document.body, 'keyup')
.pipe(through(function(event) { return {down: this.queue(event.keyCode)} }))
.pipe(keyboardBindings)
}
if(game.wantsGamePad) {
gamepad.createReadStream('down')
.pipe(through(function(event) { return {down: this.queue(event.button)} }))
.pipe(gamepadBindings)
gamepad.createReadStream('up')
.pipe(through(function(event) { return {up: this.queue(event.button)} }))
.pipe(gamepadBindings)
}
raf(document.body).on('data', function(dt) {
if(actions.forward) player.vec = FowardVector * (dt / 1000)
if(actions.jump && player.jumptime > 0) player.vec += JumpVector * (dt / 1000)
})
actions.pipe(through(function(ev) {
return JSON.stringify({
action: ev.action
, start: ev.start
, duration: ev.duration
})
}))
.pipe(fs.createWriteStream('replay'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment