Select Git revision
ussm.js 2.11 KiB
/*
hunk template
*/
// these are ES6 modules
import {
Hunkify,
Input,
Output,
State
} from '../hunks.js'
// a space-time jogging state machine for networked machines
// this is a husk, development continued in nautilus for return time reasons...
function USSM() {
// this fn attaches handles to our function-object,
Hunkify(this)
let lmReturn = new Input('int32', 'lmReturn', this)
let rmReturn = new Input('int32', 'rmReturn', this)
let rdReturn = new Input('int32', 'rdReturn', this)
this.inputs.push(lmReturn, rmReturn, rdReturn)
let lmOut = new Output('int32', 'lmOut', this)
let rmOut = new Output('int32', 'rmOut', this)
let rdTrig = new Output('boolean', 'rdTrig', this)
this.outputs.push(lmOut, rmOut, rdTrig)
// that hot hot action
let shipIt = () => {
let inc = sInc.value
lmOut.put(inc)
rmOut.put(inc)
rdTrig.put(true)
runSequence.set(true)
}
// global trigger
let runSequence = new State('boolean', 'runSequence', false)
let sInc = new State('number', 'stepIncrement', 1)
this.states.push(runSequence, sInc)
runSequence.onChange = (value) => {
//console.log("USSM trig req")
if(runSequence.value){
// shutdown and
runSequence.set(false)
} else {
if(!(lmOut.io()) && !(rmOut.io()) && !(rdTrig.io())){
shipIt()
} else {
console.warn('on ussm seq. start, outputs not clear')
runSequence.set(false)
}
}
} // end runseq. change
// hunks can choose to- or not- have init code.
// at init, the module has been loaded and state variables have been
// recalled from any program save - so this is a good point
// to check any of those, and setup accordingly ...
this.init = () => {
this.log('USSM init')
}
this.loop = () => {
// we should expect all to return before we push new outputs
if(lmReturn.io() && rmReturn.io() && rdReturn.io()){
lmReturn.get()
rmReturn.get()
rdReturn.get()
if(runSequence.value){
shipIt()
} else {
// noop
}
}
}
}
// the hunk is also an ES6 module, this is how we export those:
export default USSM