231 lines
5.5 KiB
JavaScript
231 lines
5.5 KiB
JavaScript
|
const mse = {};
|
||
|
|
||
|
/******
|
||
|
Mscript GUI
|
||
|
*******/
|
||
|
mse.mscript = {};
|
||
|
mse.mscript.editor = {};
|
||
|
mse.mscript.data = {};
|
||
|
mse.mscript.raw = '';
|
||
|
mse.mscript.init = function () {
|
||
|
'use strict';
|
||
|
$('#editor').val('CF 1\nPF 1');
|
||
|
mse.mscript.editor = CodeMirror.fromTextArea(document.getElementById('editor'), {
|
||
|
lineNumbers: true,
|
||
|
mode: 'python',
|
||
|
matchBrackets: true,
|
||
|
theme: 'monokai'
|
||
|
});
|
||
|
mse.mscript.editor.setSize(null, $(window).height() - $('footer').eq(0).height() - 30);
|
||
|
mse.mscript.editor.on('change', function (e) {
|
||
|
//
|
||
|
});
|
||
|
$(document).on('resize', function (e) {
|
||
|
mse.mscript.editor.setSize(null, $(window).height() - $('footer').eq(0).height() - 30);
|
||
|
});
|
||
|
};
|
||
|
mse.mscript.open = function () {
|
||
|
'use strict';
|
||
|
mse.mscript.editor.setSize(null, $(window).height() - $('footer').eq(0).height() - 30);
|
||
|
mse.mscript.editor.refresh();
|
||
|
};
|
||
|
mse.mscript.fromSequence = function () {
|
||
|
//ehhhhh
|
||
|
'use strict';
|
||
|
let str;
|
||
|
let tmp = [];
|
||
|
let cont;
|
||
|
let cmd;
|
||
|
//str = seq.grid.map(step => { return step.cmd }).join('\n'); //quick hack
|
||
|
//console.dir(seq.grid);
|
||
|
for (let step of seq.grid) {
|
||
|
if (!step || !step.cmd) continue;
|
||
|
cmd = step.cmd;
|
||
|
if (tmp.length > 0 && tmp[tmp.length - 1].cmd === cmd) {
|
||
|
tmp[tmp.length - 1].num++;
|
||
|
continue;
|
||
|
}
|
||
|
tmp.push({ cmd : cmd, num : 1 });
|
||
|
}
|
||
|
tmp = tmp.map(line => {
|
||
|
return `${line.cmd} ${line.num}`
|
||
|
})
|
||
|
//console.dir(tmp)
|
||
|
if (seq.gridLoops > 1) {
|
||
|
tmp.map(line => {
|
||
|
return ` ${line}`;
|
||
|
})
|
||
|
tmp.reverse();
|
||
|
tmp.push(`LOOP ${seq.gridLoops}`);
|
||
|
tmp.reverse();
|
||
|
tmp.push('END');
|
||
|
}
|
||
|
|
||
|
str = tmp.join('\n');
|
||
|
|
||
|
nav.change('script');
|
||
|
cont = confirm(`Are you sure you want to over-write the current sequence?`);
|
||
|
if (cont) {
|
||
|
mse.mscript.editor.getDoc().setValue(str);
|
||
|
}
|
||
|
};
|
||
|
mse.mscript.toGUI = function () {
|
||
|
'use strict';
|
||
|
let c;
|
||
|
let step;
|
||
|
for (let x = 0; x < mse.mscript.data.arr.length; x++) {
|
||
|
c = mse.mscript.data.arr[x];
|
||
|
seq.set(x, c);
|
||
|
if (c === 'CF' || c === 'CB') {
|
||
|
if (typeof mse.mscript.data.meta[x] !== 'undefined' && mse.mscript.data.meta[x] !== '') {
|
||
|
seq.setLight(x, mse.mscript.data.meta[x]);
|
||
|
} else {
|
||
|
seq.setLight(x, light.color);
|
||
|
}
|
||
|
} else {
|
||
|
//unset light?
|
||
|
}
|
||
|
grid.state(x);
|
||
|
}
|
||
|
};
|
||
|
mse.mscript.toSequence = function () {
|
||
|
'use strict';
|
||
|
const data = mse.mscript.editor.getValue();
|
||
|
let cont;
|
||
|
if (data !== mse.mscript.raw) {
|
||
|
cont = confirm(`Current script has not been compiled. Compile first?`);
|
||
|
if (cont) {
|
||
|
mse.mscript.compile()
|
||
|
}
|
||
|
}
|
||
|
mse.console.print(`Sending compiled script to GUI sequencer...`);
|
||
|
seq.clear();
|
||
|
mse.mscript.toGUI();
|
||
|
grid.refresh();
|
||
|
seq.stats();
|
||
|
return nav.change('sequencer');
|
||
|
}
|
||
|
mse.mscript.compile = function () {
|
||
|
'use strict';
|
||
|
const data = mse.mscript.editor.getValue();
|
||
|
const mscript = new Mscript();
|
||
|
let output = mscript.interpret(data);
|
||
|
let len = output.arr.length;
|
||
|
|
||
|
mse.mscript.raw = data;
|
||
|
mse.mscript.data = output;
|
||
|
//mse.console.print(JSON.stringify(output, null, '\t') + '\n')
|
||
|
mse.console.print(`Sequence contains ${len} step${(len === 1 ? '' : 's')}, CAM: ${output.cam}, PROJ: ${output.proj}`);
|
||
|
};
|
||
|
|
||
|
mse.mscript.prepare = function () {
|
||
|
'use strict';
|
||
|
const arr = [];
|
||
|
let obj;
|
||
|
for (let i = 0; i < mse.mscript.data.arr.length; i++) {
|
||
|
obj = {
|
||
|
cmd : mse.mscript.data.arr[i]
|
||
|
};
|
||
|
if (typeof mse.mscript.data.meta[i] !== 'undefined' && mse.mscript.data.meta[i] !== '') {
|
||
|
obj.light = mse.mscript.data.meta[i];
|
||
|
} else {
|
||
|
obj.light = light.color.join(',');
|
||
|
}
|
||
|
arr.push(obj);
|
||
|
}
|
||
|
return arr;
|
||
|
};
|
||
|
|
||
|
mse.mscript.run = function () {
|
||
|
'use strict';
|
||
|
const data = mse.mscript.editor.getValue();
|
||
|
let arr;
|
||
|
let cont;
|
||
|
if (data !== mse.mscript.raw) {
|
||
|
cont = confirm(`Current script has not been compiled. Compile first?`);
|
||
|
if (cont) {
|
||
|
mse.mscript.compile();
|
||
|
}
|
||
|
}
|
||
|
arr = mse.mscript.prepare();
|
||
|
mse.console.print(`Started running compiled sequence...`);
|
||
|
gui.overlay(true);
|
||
|
gui.spinner(true, `Running mscript sequence...`, true, true);
|
||
|
return seq.exec(arr, 1);
|
||
|
};
|
||
|
|
||
|
/*******
|
||
|
* gui console
|
||
|
*******/
|
||
|
mse.console = {};
|
||
|
mse.console.elem = {};
|
||
|
mse.console.init = function () {
|
||
|
'use script';
|
||
|
mse.console.elem = $('#console textarea');
|
||
|
mse.console.elem.on('keyup', function (e) {
|
||
|
var code = e.keyCode || e.which;
|
||
|
if (code === 13) {
|
||
|
mse.console.exec();
|
||
|
e.preventDefault();
|
||
|
return false;
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
mse.console.lines = [];
|
||
|
mse.console.parse = function () {
|
||
|
'use strict';
|
||
|
const lines = mse.console.elem.val().split('\n');
|
||
|
const line = lines[lines.length - 2].replace('>', '').trim();
|
||
|
mse.console.lines.push(line);
|
||
|
};
|
||
|
|
||
|
mse.console.exec = function () {
|
||
|
'use strict';
|
||
|
let command;
|
||
|
mse.console.parse();
|
||
|
command = mse.console.lines[mse.console.lines.length - 1].replace('>', '').trim();
|
||
|
log.info(command);
|
||
|
mse.console.newLine();
|
||
|
if (mscript.cmd.indexOf(command) !== -1) {
|
||
|
if (command === 'CF') {
|
||
|
cmd.camera_forward(light.color);
|
||
|
} else if (cmd === 'CB') {
|
||
|
cmd.camera_backward(light.color);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (command === 'compile') {
|
||
|
mse.mscript.compile();
|
||
|
} else if (command === 'run') {
|
||
|
mse.mscript.run();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
mse.console.newLine = function () {
|
||
|
'use strict';
|
||
|
let current = mse.console.elem.val();
|
||
|
let height;
|
||
|
current += '> ';
|
||
|
mse.console.elem.val(current);
|
||
|
height = mse.console.elem[0].scrollHeight;
|
||
|
mse.console.elem.animate({
|
||
|
scrollTop : height
|
||
|
},'normal');
|
||
|
};
|
||
|
|
||
|
mse.console.print = function (str) {
|
||
|
'use strict'
|
||
|
let current = mse.console.elem.val();
|
||
|
let height;
|
||
|
current += str;
|
||
|
current += '\n> ';
|
||
|
mse.console.elem.val(current);
|
||
|
mse.console.elem.focus();
|
||
|
|
||
|
height = mse.console.elem[0].scrollHeight;
|
||
|
mse.console.elem.animate({
|
||
|
scrollTop : height
|
||
|
},'normal');
|
||
|
};
|
||
|
|
||
|
module.exports = mse;
|