diff --git a/app/index.html b/app/index.html index a4fca49..7666178 100644 --- a/app/index.html +++ b/app/index.html @@ -45,8 +45,9 @@
- - + + + diff --git a/app/js/app.js b/app/js/app.js index d6e3ab3..69b74ab 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -2519,10 +2519,8 @@ mcopy.state = { direction : true }, sequence : { - size : 24, - arr : ['CF', 'PF'], - light : ['255,255,255', ''], pads: { + //gaaaaaaaaah cam_forward: 'CF', proj_forward : 'PF', black_forward : 'BF', @@ -2531,8 +2529,7 @@ mcopy.state = { proj_backward : 'PB', black_backward : 'BB', - light_set : 'L'//, - /* + light_set : 'L', cam2_forward : 'C2F', cam2_backward : 'C2B', @@ -2552,7 +2549,6 @@ mcopy.state = { proj_forward_proj2_backward : 'PFPB', proj_backward_proj2_forward : 'PBPF' - */ } } }; diff --git a/app/lib/sequencer/index.js b/app/lib/sequencer/index.js index cd8c483..71b46dc 100644 --- a/app/lib/sequencer/index.js +++ b/app/lib/sequencer/index.js @@ -4,6 +4,8 @@ const Log = require("log"); let seq; class Sequencer { constructor(cfg, cmd) { + this.running = false; + this.paused = false; this.arr = []; this.loops = 1; this.CMDS = {}; @@ -31,9 +33,21 @@ class Sequencer { } async listener(event, arg) { console.dir(arg); - if (arg && arg.set) { + if (arg && arg.start) { + this.start(arg); + } + else if (arg && arg.stop) { + this.stop(); + } + else if (arg && arg.pause) { + this.pause(); + } + else if (arg && arg.set) { this.setSteps(arg.set); } + else if (arg && arg.unset) { + this.unsetSteps(arg.unset); + } else if (arg && arg.loops) { this.loops = arg.loops; } @@ -42,24 +56,36 @@ class Sequencer { setSteps(steps) { console.dir(steps); } - //new + unsetSteps(steps) { + } + //new, replaces exec and init async start(arg) { if (arg && arg.arr) { - this.arr = arg.arr; + this.arr = arg.arr; //overwrite sequence } if (arg && arg.loops) { - this.loops = arg.loops; + this.loops = arg.loops; //overwrite loops } + this.running = true; + this.paused = false; for (let x = 0; x < this.loops; x++) { + //start loop for (let y = 0; y < this.arr.length; y++) { + //start step if (this.running) { + while (this.paused) { + await delay(42); + } await this.step(y); } + //end step } + //end loop } } //new pause() { + this.paused = true; } /** * Stop the sequence diff --git a/app/lib/sequencer/index.js.map b/app/lib/sequencer/index.js.map index e8fcdce..26a4a56 100644 --- a/app/lib/sequencer/index.js.map +++ b/app/lib/sequencer/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app/lib/ui/devices.js b/app/lib/ui/devices.js index 414694c..f20b22d 100644 --- a/app/lib/ui/devices.js +++ b/app/lib/ui/devices.js @@ -218,9 +218,11 @@ devices.digitalCb = function (evt, args) { $('#projector_type_digital').prop('checked', 'checked'); gui.notify('DEVICES', `Using video ${state.fileName}`); - mcopy.state.sequence.arr = ['PF', 'CF']; - grid.setLight(1, color); + seq.set(0, 'PF'); grid.state(0); + + seq.set(1, 'CF'); + seq.setLight(1, color); grid.state(1); if (light.disabled) { diff --git a/app/lib/ui/grid.js b/app/lib/ui/grid.js index 6e83b55..1a1abe3 100644 --- a/app/lib/ui/grid.js +++ b/app/lib/ui/grid.js @@ -14,19 +14,20 @@ grid.init = function () { * Set a specific grid pad to the state stored in the sequence * array at that step * - * @param {integer} i Step in sequence + * @param {integer} x Step in sequence **/ -grid.state = function (i) { +grid.state = function (x) { 'use strict'; - const elem = $(`input[x=${i}]`); - const lightElem = $(`.L[x=${i}]`); - if (typeof mcopy.state.sequence.arr[i] !== 'undefined') { + const elem = $(`input[x=${x}]`); + const lightElem = $(`.L[x=${x}]`); + const step = seq.arr[x]; + if (typeof step !== 'undefined') { elem.prop('checked', false); - $(`.${mcopy.state.sequence.arr[i]}[x=${i}]`).prop('checked', true); - if (mcopy.state.sequence.arr[i] === 'CF' || mcopy.state.sequence.arr[i] === 'CB') { - lightElem.css('background', `rgb(${mcopy.state.sequence.light[i]})`) + $(`.${step.cmd}[x=${x}]`).prop('checked', true); + if (step.cmd === 'CF' || step.cmd === 'CB') { + lightElem.css('background', `rgb(${step.light})`) .addClass('a') - .prop('title', `rgb(${mcopy.state.sequence.light[i]})`); + .prop('title', `rgb(${seq.light})`); } else { lightElem.css('background', 'transparent') @@ -46,7 +47,14 @@ grid.state = function (i) { **/ grid.refresh = function () { 'use strict'; - const cmds = ['cam_forward', 'proj_forward', 'cam_backward', 'proj_backward', 'light_set', 'numbers']; + const cmds = [ + 'cam_forward', + 'proj_forward', + 'cam_backward', + 'proj_backward', + 'light_set', + 'numbers' + ]; const check = ''; const div = '
'; const width = 970 - 34 + ((940 / 24) * Math.abs(24 - seq.size)); @@ -77,22 +85,17 @@ grid.refresh = function () { **/ grid.click = function (t) { 'use strict'; - const i = parseInt($(t).attr('x')); + const x = parseInt($(t).attr('x')); let c; - //TODO: ADD OTHER STATES if ($(t).prop('checked')) { + c = $(t).attr('class').replace('.', ''); - mcopy.state.sequence.arr[i] = c; - if (c === 'CF' || c === 'CB') { - mcopy.state.sequence.light[i] = light.color.join(','); - } else { - mcopy.state.sequence.light[i] = ''; - } + seq.set(x, c); } else { - mcopy.state.sequence.arr[i] = undefined; - delete mcopy.state.sequence.arr[i]; + //seq.arr[i] = undefined; + //delete seq.arr[i]; } - grid.state(i); + grid.state(x); seq.stats(); }; /** @@ -106,7 +109,7 @@ grid.clear = function () { seq.clear(); grid.refresh(); seq.stats(); - console.log('Sequencer cleared'); + log.info('Sequencer cleared'); } }; /** @@ -116,19 +119,7 @@ grid.plus_24 = function () { 'use strict'; seq.size += 24; grid.refresh(); - console.log(`Sequencer expanded to ${seq.size} steps`); -}; -/** - * Set the light value at a specific step and then update - * GUI grid via .state() - * - * @param {integer} x Step in sequence - * @param {array} rgb Light value in RGB - **/ -grid.setLight = function (x, rgb) { - 'use strict'; - mcopy.state.sequence.light[x] = rgb.join(','); - grid.state(x); + log.info(`Sequencer expanded to ${seq.size} steps`); }; /** * Set light value to black (0,0,0) when double clicked @@ -137,14 +128,14 @@ grid.setLight = function (x, rgb) { **/ grid.blackout = function (t) { const elem = $(t); - const i = elem.attr('x'); - if (typeof mcopy.state.sequence.light[i] === 'undefined') { + const x = elem.attr('x'); + if (typeof seq.arr[x].light === 'undefined') { return false; } - if (mcopy.state.sequence.light[i] === '0,0,0') { - grid.setLight(i, light.color); + if (seq.arr[x].light === '0,0,0') { + seq.setLight(i, light.color); } else { - grid.setLight(i, [0, 0, 0]); + seq.setLight(i, [0, 0, 0]); } }; @@ -156,7 +147,9 @@ grid.blackout = function (t) { */ grid.changeAll = function (rgb) { 'use strict'; - for (let [i, c] of mcopy.state.sequence.arr.entries()) { + let c; + for (let step of seq.arr) { + c = step.cmd; if (c === 'CF' || c === 'CB') { grid.setLight(i, rgb); } @@ -170,7 +163,7 @@ grid.changeAll = function (rgb) { **/ grid.swatches = function (x) { 'use strict'; - const current = mcopy.state.sequence.light[x]; + const current = seq.arr[x].light; grid.swatchesElem = w2popup.open({ title : 'Select Color', body : $('#light-swatches').html(), @@ -229,7 +222,7 @@ grid.events = function () { }); //$(document.body).on('click', '.L', function () { //alert('click'); - //console.log('please dont happen'); + //log.warn('please dont happen'); //}); $(document.body).on('dblclick', '.L', function () { grid.blackout(this); diff --git a/app/lib/ui/mscript.js b/app/lib/ui/mscript.js index 2d7f522..ea0d38b 100644 --- a/app/lib/ui/mscript.js +++ b/app/lib/ui/mscript.js @@ -35,9 +35,11 @@ mse.mscript.fromSequence = function () { let str; let tmp = []; let cont; - //str = mcopy.state.sequence.arr.join('\n'); //quick hack - console.dir(mcopy.state.sequence); - for (let cmd of mcopy.state.sequence.arr) { + let cmd; + //str = seq.arr.map(step => { return step.cmd }).join('\n'); //quick hack + console.dir(seq.arr); + for (let step of seq.arr) { + cmd = step.cmd; if (tmp.length > 0 && tmp[tmp.length - 1].cmd === cmd) { tmp[tmp.length - 1].num++; continue; @@ -69,18 +71,19 @@ mse.mscript.fromSequence = function () { mse.mscript.toGUI = function () { 'use strict'; let c; - for (let i = 0; i < mse.mscript.data.arr.length; i++) { - c = mse.mscript.data.arr[i]; - mcopy.state.sequence.arr[i] = c; + let step; + for (let x = 0; x < mse.mscript.data.arr.length; x++) { + c = mse.mscript.data.arr[x]; + seq.set(x, c); console.dir(mse.mscript.data); if (c === 'CF' || c === 'CB') { - if (typeof mse.mscript.data.light[i] !== 'undefined' && mse.mscript.data.light[i] !== '') { - mcopy.state.sequence.light[i] = mse.mscript.data.light[i]; + if (typeof mse.mscript.data.light[x] !== 'undefined' && mse.mscript.data.light[x] !== '') { + seq.setLight(x, mse.mscript.data.light[x]); } else { - mcopy.state.sequence.light[i] = light.color.join(','); + seq.setLight(x, light.color.join(',')); } } else { - mcopy.state.sequence.light[i] = ''; + //unset light? } grid.state(i); } diff --git a/app/lib/ui/seq.js b/app/lib/ui/seq.js index 3fa7557..f0fd98d 100644 --- a/app/lib/ui/seq.js +++ b/app/lib/ui/seq.js @@ -3,117 +3,27 @@ seq.id = 'sequence'; seq.arr = []; seq.loops = 1; seq.size = 24; +seq.time = 0; +seq.running = false; /****** Sequence Object *******/ -/*seq.run = function () { +seq.stop = function (s) { 'use strict'; - var c = mcopy.state.sequence.arr[seq.i], - timeEnd = 0, - rgb, - action = function () { - setTimeout(function () { - seq.i++; - seq.run(); - }, cfg.arduino.sequenceDelay); - } - if (seq.i == 0) { - $('#loop_current').text(gui.fmtZero(mcopy.loopCount + 1, 6)); - ipcRenderer.send('seq', { action : 'loop' }); - } - if (seq.stop()) { - $('.row input').removeClass('h'); - $('#numbers div').removeClass('h'); - //console.log('Sequence stepped'); - log.info('Sequence stopped', 'SERIAL', true); - return false; - } - if (seq.i <= mcopy.state.sequence.arr.length && c !== undefined) { - log.info('Step ' + seq.i + ' command ' + c, 'SEQUENCE', true); - //gui action - $('.row input').removeClass('h'); - $('#numbers div').removeClass('h'); - $('.row input[x=' + seq.i + ']').addClass('h'); - $('#numbers div[x=' + seq.i + ']').addClass('h'); - if (c === cfg.cmd.camera_forward){ - rgb = mcopy.state.sequence.light[seq.i].split(','); - cmd.camera_forward(rgb, action); - } else if (c === cfg.cmd.camera_backward) { - rgb = mcopy.state.sequence.light[seq.i].split(','); - cmd.camera_backward(rgb, action); - } else if (c === cfg.cmd.projector_forward) { - cmd.projector_forward(action); - } else if (c === cfg.cmd.projector_backward) { - cmd.projector_backward(action); - } else if (c === cfg.cmd.black_forward) { - cmd.black_forward(action); - } else if (c === cfg.cmd.black_backward) { - cmd.black_backward(action); - } - } else { - mcopy.loopCount++; - $('#loop_current').text(gui.fmtZero(mcopy.loopCount + 1, 6)); - if (mcopy.loopCount < mcopy.loop) { - log.info('Loop ' + mcopy.loopCount + ' completed', 'SEQUENCE', true); - $('.row input').removeClass('h'); - $('#numbers div').removeClass('h'); - seq.i = 0; - seq.run(); - } else { - timeEnd = +new Date(); - timeEnd = timeEnd - seq.time; - if (timeEnd < 2000) { - log.info('Sequence completed in ' + timeEnd + 'ms', 'SEQUENCE', true); - } else { - log.info('Sequence completed in ' + humanizeDuration(timeEnd), 'SEQUENCE', true); - } - ipcRenderer.send('seq', { action : 'stop' }); - gui.notify('Sequence done!', (mcopy.state.sequence.arr.length * mcopy.loop) + ' actions completed in ' + humanizeDuration(timeEnd)); - //clear gui - $('.row input').removeClass('h'); - $('#numbers div').removeClass('h'); - $('#loop_current').text(''); - seq.stats(); - } - } -};*/ -seq.stop = function (state) { - 'use strict'; - ipcRenderer.send('seq', { action : 'stop' }); - /* - if (typeof state === 'undefined') { - if (seq.stopState === true) { - ipcRenderer.send('seq', { action : 'stop' }); - } - return seq.stopState; - } else { - seq.stopState = state; - } - if (state === false) { - mcopy.loopCount = 0 - $('#loop_current').text(''); - } else { - ipcRenderer.send('seq', { action : 'stop' }); - }*/ - return state + ipcRenderer.send(seq.id, { stop : true }); + $('#loop_current').text(''); }; -seq.init = function (start) { +seq.start = function (start) { 'use strict'; - /*if (typeof start === 'undefined') { - start = 0; - mcopy.loopCount = 0; - seq.time = +new Date(); - }*/ - //seq.stop(false); - //seq.i = start; + seq.time = +new Date(); - ipcRenderer.send('seq', { action : 'start' }); - //seq.run(); + ipcRenderer.send(seq.id, { start : true }); }; seq.set = function (x, cmd) { + 'use strict'; let increase = 0; if (x >= seq.arr.length + 1) { increase = x - seq.arr.length; @@ -136,6 +46,26 @@ seq.set = function (x, cmd) { //update grid? } +seq.unset = function (x) { + 'use strict'; + seq.arr[x] = undefined + ipcRenderer.send(seq.id, { unset : [ x ]}); +} + +/** + * Set the light value at a specific step and then update + * GUI grid via .state() + * + * @param {integer} x Step in sequence + * @param {array} rgb Light value in RGB + **/ +seq.setLight = function (x, rgb) { + 'use strict'; + let color = rgb.join(','); + seq.arr[x].light = color; + ipcRenderer.send(seq.id, { x, cmd : seq.arr[x].cmd, light : color }); +}; + /** * Function bound to the change event on the loop counter * input element @@ -155,7 +85,7 @@ seq.stats = function () { let c = ''; let cam_total = 0; let proj_total = 0; - let real_total = mcopy.state.sequence.arr.filter(function (elem) { + let real_total = seq.arr.filter(function (elem) { if (elem === undefined) { return false; } @@ -163,7 +93,8 @@ seq.stats = function () { }); //timing - for (let c of mcopy.state.sequence.arr) { + for (let step of seq.arr) { + c = seq.cmd; if (c === cfg.cmd.camera_forward || c === cfg.cmd.camera_backward){ ms += cfg.arduino.cam.time; ms += cfg.arduino.cam.delay; @@ -216,92 +147,18 @@ seq.stats = function () { $('#seq_stats .seq_count span').text(real_total.length * seq.loops); return ms; }; + seq.clear = function () { 'use strict'; seq.size = 24; seq.arr = []; }; -/** - * Queue for exec function - */ -seq.queue = []; -seq.running = false; -seq.state = {}; -/** - * Execute an array of commands, locking up the UI during execution. - */ -seq.exec = function (arr) { - 'use strict'; - seq.running = true; - seq.state.len = arr.length; - //setup queue - seq.queue = arr; - //console.dir(arr); - gui.overlay(true); - gui.spinner(true, `Running sequence of ${arr.length} frame${(arr.length === 1 ? '' : 's')}`, 0, true); - log.info(`Sequence started`, 'SEQUENCE', true); - ipcRenderer.send('seq', { action : 'start' }); - //seq.step(); -}; - seq.cancel = function () { gui.spinner(true, `Cancelling sequence...`); seq.running = false; + seq.stop(); } -seq.execStop = function (msg) { - 'use strict'; - gui.overlay(false); - gui.spinner(false); - log.info(`Sequence ${msg}`, 'SEQUENCE', true); - return false; -}; - -seq.step = function () { - 'use strict'; - let elem; - let c; - let rgb; - let current; - let max; - - if (!seq.running) { - return seq.execStop('stopped'); - } - - return setTimeout(() => { - elem = seq.queue.shift(); - if (typeof elem !== 'undefined') { - c = elem.cmd; - if (typeof elem.light !== 'undefined') { - rgb = elem.light.split(','); - } else { - rgb = light.color; - } - } else { - return seq.execStop('completed'); - } - if (typeof elem !== 'undefined') { - current = seq.state.len - seq.queue.length; - max = seq.state.len; - gui.spinner(true, `Sequence: step ${c} ${current}/${max}`, (current / max) * 100, true); - log.info(`Sequence: step ${c} ${current}/${max}`, 'SEQUENCE', true); - if (c === cfg.cmd.camera_forward){ - cmd.camera_forward(rgb, seq.step); - } else if (c === cfg.cmd.camera_backward) { - cmd.camera_backward(rgb, seq.step); - } else if (c === cfg.cmd.projector_forward) { - cmd.projector_forward(seq.step); - } else if (c === cfg.cmd.projector_backward) { - cmd.projector_backward(seq.step); - } else if (c === cfg.cmd.black_forward) { - cmd.black_forward(seq.step); - } else if (c === cfg.cmd.black_backward) { - cmd.black_backward(seq.step); - } - } - }, cfg.arduino.sequenceDelay); -}; module.exports = seq; \ No newline at end of file diff --git a/app/main.js b/app/main.js index d464714..433d687 100644 --- a/app/main.js +++ b/app/main.js @@ -117,22 +117,19 @@ var init = async function () { log.error('Error enumerating connected devices', err) } - light = require('light')(arduino, cfg, mainWindow.webContents) dig = require('digital')(display, ffmpeg, ffprobe, mainWindow.webContents, light) cam = require('cam')(arduino, cfg, mainWindow.webContents, dig) proj = require('proj')(arduino, cfg, mainWindow.webContents, dig) - cmd = require('cmd')(cfg, proj, cam, light); - seq = require('sequencer')(cfg, cmd); + cmd = require('cmd')(cfg, proj, cam, light) + seq = require('sequencer')(cfg, cmd) } app.on('ready', init) app.on('window-all-closed', () => { - //if (process.platform !== 'darwin') { - app.quit(); - //} + app.quit(); }); app.on('activate', () => { diff --git a/app/src/index.js b/app/src/index.js index 4e005df..dfe91cd 100644 --- a/app/src/index.js +++ b/app/src/index.js @@ -45,10 +45,8 @@ mcopy.state = { direction : true }, sequence : { - size : 24, - arr : ['CF', 'PF'], - light : ['255,255,255', ''], pads: { + //gaaaaaaaaah cam_forward: 'CF', proj_forward : 'PF', black_forward : 'BF', @@ -57,8 +55,7 @@ mcopy.state = { proj_backward : 'PB', black_backward : 'BB', - light_set : 'L'//, - /* + light_set : 'L', cam2_forward : 'C2F', cam2_backward : 'C2B', @@ -78,7 +75,6 @@ mcopy.state = { proj_forward_proj2_backward : 'PFPB', proj_backward_proj2_forward : 'PBPF' - */ } } }; diff --git a/cli/lib/sequencer/index.js b/cli/lib/sequencer/index.js index cd8c483..71b46dc 100644 --- a/cli/lib/sequencer/index.js +++ b/cli/lib/sequencer/index.js @@ -4,6 +4,8 @@ const Log = require("log"); let seq; class Sequencer { constructor(cfg, cmd) { + this.running = false; + this.paused = false; this.arr = []; this.loops = 1; this.CMDS = {}; @@ -31,9 +33,21 @@ class Sequencer { } async listener(event, arg) { console.dir(arg); - if (arg && arg.set) { + if (arg && arg.start) { + this.start(arg); + } + else if (arg && arg.stop) { + this.stop(); + } + else if (arg && arg.pause) { + this.pause(); + } + else if (arg && arg.set) { this.setSteps(arg.set); } + else if (arg && arg.unset) { + this.unsetSteps(arg.unset); + } else if (arg && arg.loops) { this.loops = arg.loops; } @@ -42,24 +56,36 @@ class Sequencer { setSteps(steps) { console.dir(steps); } - //new + unsetSteps(steps) { + } + //new, replaces exec and init async start(arg) { if (arg && arg.arr) { - this.arr = arg.arr; + this.arr = arg.arr; //overwrite sequence } if (arg && arg.loops) { - this.loops = arg.loops; + this.loops = arg.loops; //overwrite loops } + this.running = true; + this.paused = false; for (let x = 0; x < this.loops; x++) { + //start loop for (let y = 0; y < this.arr.length; y++) { + //start step if (this.running) { + while (this.paused) { + await delay(42); + } await this.step(y); } + //end step } + //end loop } } //new pause() { + this.paused = true; } /** * Stop the sequence diff --git a/cli/lib/sequencer/index.js.map b/cli/lib/sequencer/index.js.map index e8fcdce..26a4a56 100644 --- a/cli/lib/sequencer/index.js.map +++ b/cli/lib/sequencer/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/sequencer/index.js b/lib/sequencer/index.js index cd8c483..71b46dc 100644 --- a/lib/sequencer/index.js +++ b/lib/sequencer/index.js @@ -4,6 +4,8 @@ const Log = require("log"); let seq; class Sequencer { constructor(cfg, cmd) { + this.running = false; + this.paused = false; this.arr = []; this.loops = 1; this.CMDS = {}; @@ -31,9 +33,21 @@ class Sequencer { } async listener(event, arg) { console.dir(arg); - if (arg && arg.set) { + if (arg && arg.start) { + this.start(arg); + } + else if (arg && arg.stop) { + this.stop(); + } + else if (arg && arg.pause) { + this.pause(); + } + else if (arg && arg.set) { this.setSteps(arg.set); } + else if (arg && arg.unset) { + this.unsetSteps(arg.unset); + } else if (arg && arg.loops) { this.loops = arg.loops; } @@ -42,24 +56,36 @@ class Sequencer { setSteps(steps) { console.dir(steps); } - //new + unsetSteps(steps) { + } + //new, replaces exec and init async start(arg) { if (arg && arg.arr) { - this.arr = arg.arr; + this.arr = arg.arr; //overwrite sequence } if (arg && arg.loops) { - this.loops = arg.loops; + this.loops = arg.loops; //overwrite loops } + this.running = true; + this.paused = false; for (let x = 0; x < this.loops; x++) { + //start loop for (let y = 0; y < this.arr.length; y++) { + //start step if (this.running) { + while (this.paused) { + await delay(42); + } await this.step(y); } + //end step } + //end loop } } //new pause() { + this.paused = true; } /** * Stop the sequence diff --git a/lib/sequencer/index.js.map b/lib/sequencer/index.js.map index e8fcdce..26a4a56 100644 --- a/lib/sequencer/index.js.map +++ b/lib/sequencer/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,2BAA4B;AAE5B,IAAI,GAAe,CAAC;AAEpB,MAAM,SAAS;IAcd,YAAa,GAAS,EAAE,GAAS;QAVzB,QAAG,GAAW,EAAE,CAAC;QACjB,UAAK,GAAY,CAAC,CAAC;QAInB,SAAI,GAAS,EAAE,CAAC;QAGhB,OAAE,GAAY,UAAU,CAAC;QAGhC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAEO,IAAI,CAAE,GAAS;QACtB,IAAI,IAAI,GAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAY,CAAC;QACjB,KAAK,GAAG,IAAI,IAAI,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;SAC3B;IACF,CAAC;IAED,wBAAwB;IAChB,KAAK,CAAC,IAAI;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,EAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEO,MAAM;QACb,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAE,KAAW,EAAE,GAAS;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChB,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACvB;aAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;SACvB;QACD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAEM,QAAQ,CAAE,KAAW;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IACD,KAAK;IACE,KAAK,CAAC,KAAK,CAAE,GAAS;QAC5B,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE;YACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;SACnB;QACD,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;SACvB;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI,IAAI,CAAC,OAAO,EAAE;oBACjB,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACnB;aACD;SACD;IACF,CAAC;IACD,KAAK;IACE,KAAK;IAEZ,CAAC;IACD;;QAEI;IACG,IAAI;QACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,QAAQ;IAET,CAAC;IAEO,KAAK,CAAC,IAAI,CAAE,KAAc;QACjC,IAAI;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;SACxB;QAAC,OAAO,GAAG,EAAE;YACb,MAAM,GAAG,CAAC;SACV;IAEF,CAAC;IAEO,KAAK,CAAC,MAAM,CAAE,KAAc;QACnC,MAAM,WAAW,GAAY,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QACjD,MAAM,GAAG,GAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;CACD;AAED,MAAM,CAAC,OAAO,GAAG,UAAU,GAAS,EAAE,GAAS;IAC9C,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sequencer/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/sequencer/index.ts b/src/sequencer/index.ts index d875f46..6f3a6a5 100644 --- a/src/sequencer/index.ts +++ b/src/sequencer/index.ts @@ -6,7 +6,8 @@ let seq : Sequencer; class Sequencer { private time : number; - private running : boolean; + private running : boolean = false; + private paused : boolean = false; private arr : any[] = []; private loops : number = 1; @@ -46,8 +47,16 @@ class Sequencer { private async listener (event : any, arg : any) { console.dir(arg) - if (arg && arg.set) { + if (arg && arg.start) { + this.start(arg); + } else if (arg && arg.stop) { + this.stop(); + } else if (arg && arg.pause) { + this.pause(); + } else if (arg && arg.set) { this.setSteps(arg.set); + } else if (arg && arg.unset) { + this.unsetSteps(arg.unset); } else if (arg && arg.loops) { this.loops = arg.loops; } @@ -57,26 +66,39 @@ class Sequencer { public setSteps (steps : any) { console.dir(steps) } - //new + public unsetSteps (steps : number[]) { + + } + //new, replaces exec and init public async start (arg : any) { if (arg && arg.arr) { - this.arr = arg.arr; + this.arr = arg.arr; //overwrite sequence } if (arg && arg.loops) { - this.loops = arg.loops; + this.loops = arg.loops; //overwrite loops } + + this.running = true; + this.paused = false; for (let x = 0; x < this.loops; x++) { + //start loop for (let y = 0; y < this.arr.length; y++) { + //start step if (this.running) { + while (this.paused) { + await delay(42); + } await this.step(y); } + //end step } + //end loop } } //new public pause () { - + this.paused = true; } /** * Stop the sequence