intval3/lib/sequence/index.js

114 lines
2.5 KiB
JavaScript
Raw Permalink Normal View History

'use strict'
const uuid = require('uuid').v4
2017-12-20 23:40:51 +00:00
const log = require('../log')('seq')
/** Object sequence features */
const sequence = {};
sequence._state = {
arr : [],
active : false,
2017-12-20 23:40:51 +00:00
paused : false,
frame: false,
2017-12-20 23:40:51 +00:00
delay : false,
count : 0,
stop : null
}
sequence._loop = {
arr : [],
count : 0,
max : 0
}
sequence.start = function (options, cb) {
if (sequence._state.active) {
return false
}
2017-12-20 23:40:51 +00:00
sequence._state.active = true
sequence._state.count = 0
if (options.arr) {
sequence._state.arr = options.arr
}
if (options.loop) {
sequence._loop.arr = options.loop
sequence._loop.count = 0
}
if (options.maxLoop) {
sequence._loop.max = options.maxLoop
} else {
sequence._loop.max = 0
}
sequence._state.stop = cb
2017-12-20 23:40:51 +00:00
sequence.step()
sequence._state.id = uuid()
return sequence._state.id
2017-12-20 23:40:51 +00:00
}
sequence.setStop = function () {
sequence._state.active = false
}
sequence.stop = function () {
2017-12-20 23:40:51 +00:00
sequence._state.active = false
sequence._state.count = 0
sequence._state.arr = []
2017-12-20 23:40:51 +00:00
sequence._loop.count = 0
sequence._loop.max = 0
sequence._loop.arr = []
if (sequence._state.stop) sequence._state.stop()
sequence._state.stop = null
2017-12-20 23:40:51 +00:00
}
sequence.pause = function () {
sequence._state.paused = true
}
sequence.resume = function () {
sequence._state.paused = false
sequence.step()
}
2017-12-20 23:40:51 +00:00
sequence.step = function () {
if (sequence._state.active && !sequence._state.paused) {
if (sequence._state.arr.length > 0) {
if (sequence._state.count > sequence._state.arr.length - 1) {
return sequence.stop()
}
log.info('step', { count : sequence._state.count, id : sequence._state.id })
2017-12-20 23:40:51 +00:00
return sequence._state.arr[sequence._state.count](() => {
sequence._state.count++
sequence.step()
})
} else if (sequence._loop.arr.length > 0) {
if (sequence._state.count > sequence._loop.arr.length - 1) {
2017-12-20 23:40:51 +00:00
sequence._state.count = 0
sequence._loop.count++
}
if (sequence._loop.max > 0 && sequence._loop.count > sequence._loop.max) {
2017-12-20 23:40:51 +00:00
return sequence.stop()
}
log.info('step', { count : sequence._state.count, id : sequence._state.id })
2017-12-20 23:40:51 +00:00
return sequence._loop.arr[sequence._state.count](() => {
sequence._state.count++
sequence.step()
2017-12-20 23:40:51 +00:00
})
} else{
return sequence.stop()
}
} else if (sequence._state.paused) {
log.info('step', 'Sequence paused', { loop : sequence._loop.count, count : sequence._state.count })
2017-12-20 23:40:51 +00:00
} else if (!sequence._state.active) {
log.info('step', 'Sequence stopped', { loop : sequence._loop.count, count : sequence._state.count })
2017-12-20 23:40:51 +00:00
}
}
module.exports = sequence