Made a breaking change to the mscript module: light array is now the "meta" array to allow for types of commands other than camera movements to have associated metadata. The two driving motivations for this change are the proposed alert feature which will have a string message as its metadata and the proposed pause feature, which will have seconds as its metadata.

Updated tests as well. Still need to change behavior in the mscript.js gui lib.
This commit is contained in:
mmcwilliams 2019-07-26 19:54:22 -04:00
parent c01f3ceff8
commit 96d0897f65
8 changed files with 137 additions and 104 deletions

View File

@ -60,7 +60,7 @@ class Mscript {
this.rec = -1;
this.two = '';
this.arr = [];
this.light = [];
this.meta = [];
this.target = 0; //move to target using CAM # or PROJ #
this.dist = 0;
this.variables = {};
@ -125,11 +125,12 @@ class Mscript {
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
this.pause(line);
}
}
this.output.success = true;
this.output.arr = this.arr; //all instructions
this.output.light = this.light; //all light instructions
this.output.meta = this.meta; //all metadata for instructions
this.output.cam = this.cam;
this.output.proj = this.proj;
if (typeof callback !== 'undefined') {
@ -200,12 +201,12 @@ class Mscript {
//hold generated arr in state loop array
this.loops[this.rec].arr
.push.apply(this.loops[this.rec].arr, this.str_to_arr(line, this.two));
this.loops[this.rec].light
.push.apply(this.loops[this.rec].light, this.light_to_arr(line, this.two));
this.loops[this.rec].meta
.push.apply(this.loops[this.rec].meta, this.light_to_arr(line, this.two));
}
else {
this.arr.push.apply(this.arr, this.str_to_arr(line, this.two));
this.light.push.apply(this.light, this.light_to_arr(line, this.two));
this.meta.push.apply(this.meta, this.light_to_arr(line, this.two));
}
}
/**
@ -218,7 +219,7 @@ class Mscript {
this.rec++;
this.loops[this.rec] = {
arr: [],
light: [],
meta: [],
cam: 0,
proj: 0,
cmd: line + ''
@ -233,29 +234,29 @@ class Mscript {
* @param {string} line Line to interpret
*/
end_loop(line) {
let light_arr;
let meta_arr;
let start;
let end;
let len;
for (let x = 0; x < this.loop_count(this.loops[this.rec].cmd); x++) {
light_arr = this.loops[this.rec].light;
meta_arr = this.loops[this.rec].meta;
if (this.loops[this.rec].fade) {
start = this.loops[this.rec].start;
end = this.loops[this.rec].end;
len = this.loops[this.rec].fade_len;
light_arr = light_arr.map(l => {
meta_arr = meta_arr.map(l => {
return this.fade_rgb(start, end, len, x);
});
}
if (this.rec === 0) {
this.arr.push.apply(this.arr, this.loops[this.rec].arr);
this.light.push.apply(this.light, light_arr);
this.meta.push.apply(this.meta, meta_arr);
}
else if (this.rec >= 1) {
this.loops[this.rec - 1].arr
.push.apply(this.loops[this.rec - 1].arr, this.loops[this.rec].arr);
this.loops[this.rec - 1].light
.push.apply(this.loops[this.rec - 1].light, light_arr);
this.loops[this.rec - 1].meta
.push.apply(this.loops[this.rec - 1].meta, meta_arr);
}
}
this.update('END', this.loop_count(this.loops[this.rec].cmd));
@ -274,7 +275,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BF');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BF');
}
}
@ -282,7 +283,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BB');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BB');
}
}
@ -292,7 +293,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BF');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BF');
}
}
@ -300,7 +301,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BB');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BB');
}
}
@ -318,7 +319,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PF');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PF');
}
}
@ -326,7 +327,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PB');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PB');
}
}
@ -336,7 +337,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PF');
this.light.push('');
this.meta.push('');
this.update('PF');
}
}
@ -344,7 +345,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PB');
this.light.push('');
this.meta.push('');
this.update('PB');
}
}
@ -618,6 +619,13 @@ class Mscript {
const color = str.replace('L ', '').trim();
this.color = color;
}
/**
* Interpret a pause command
*
* @param {string} line String containing pause command
**/
pause(line) {
}
/**
* Throw an error with specific message
*

File diff suppressed because one or more lines are too long

View File

@ -159,8 +159,8 @@ END`;
&& obj.cam === 8
&& obj.proj === 8
&& obj.arr.length === 16
&& obj.light.length === 16
&& obj.light[0] === '0,0,0') {
&& obj.meta.length === 16
&& obj.meta[0] === '0,0,0') {
pass = true;
}
assert.ok(pass, 'Basic cam/proj loop');
@ -178,9 +178,9 @@ describe('mscript - Light', () => {
&& obj.cam === 1
&& obj.proj === 1
&& obj.arr.length === 2
&& obj.light.length === 2
&& obj.light[0] === '255,255,255'
&& obj.light[1] === '') {
&& obj.meta.length === 2
&& obj.meta[0] === '255,255,255'
&& obj.meta[1] === '') {
pass = true;
}
assert.ok(pass, 'Basic light');
@ -194,10 +194,10 @@ describe('mscript - Light', () => {
&& obj.cam === 2
&& obj.proj === 1
&& obj.arr.length === 3
&& obj.light.length === 3
&& obj.light[0] === '255,255,255'
&& obj.light[1] === ''
&& obj.light[2] === '0,0,0') {
&& obj.meta.length === 3
&& obj.meta[0] === '255,255,255'
&& obj.meta[1] === ''
&& obj.meta[2] === '0,0,0') {
pass = true;
}
assert.ok(pass, 'Basic black');
@ -210,9 +210,9 @@ describe('mscript - Light', () => {
&& obj.cam === 4
&& obj.proj === 0
&& obj.arr.length === 4
&& obj.light.length === 4
&& obj.light[0] === '1,1,1'
&& obj.light[3] === '2,2,2') {
&& obj.meta.length === 4
&& obj.meta[0] === '1,1,1'
&& obj.meta[3] === '2,2,2') {
pass = true;
}
assert.ok(pass, 'Basic light');
@ -233,9 +233,9 @@ PF 10`
assert.equal(obj.cam, 72, `Camera moves forward 72 frames`);
assert.equal(obj.proj, 10, 'Projector moves forward 10 frames');
assert.equal(obj.arr.length, 82, 'Generates 82 steps');
assert.equal(obj.light[0], '0,0,0', 'Fade starts with starting color');
assert.equal(obj.light[71], '10,20,30', 'Fade ends with ending color');
assert.equal(obj.light[72], '', 'Frame after fade is default color');
assert.equal(obj.meta[0], '0,0,0', 'Fade starts with starting color');
assert.equal(obj.meta[71], '10,20,30', 'Fade ends with ending color');
assert.equal(obj.meta[72], '', 'Frame after fade is default color');
})
const script2 =
@ -252,9 +252,9 @@ CF 10`
assert.ok(obj.success, 'Mscript labeled output success');
assert.equal(obj.cam, 34, 'There are 34 camera frames');
assert.equal(obj.arr.length, 34, 'There are 34 steps in the script');
assert.equal(obj.light[0], '25,255,125', 'First frame is equal to start color');
assert.equal(obj.light[23], '225,125,10', 'Last frame in fade is equal to end color');
assert.equal(obj.light[24], '225,125,10', 'First frame after fade is set using Light command');
assert.equal(obj.meta[0], '25,255,125', 'First frame is equal to start color');
assert.equal(obj.meta[23], '225,125,10', 'Last frame in fade is equal to end color');
assert.equal(obj.meta[24], '225,125,10', 'First frame after fade is set using Light command');
})
})

View File

@ -60,7 +60,7 @@ class Mscript {
this.rec = -1;
this.two = '';
this.arr = [];
this.light = [];
this.meta = [];
this.target = 0; //move to target using CAM # or PROJ #
this.dist = 0;
this.variables = {};
@ -125,11 +125,12 @@ class Mscript {
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
this.pause(line);
}
}
this.output.success = true;
this.output.arr = this.arr; //all instructions
this.output.light = this.light; //all light instructions
this.output.meta = this.meta; //all metadata for instructions
this.output.cam = this.cam;
this.output.proj = this.proj;
if (typeof callback !== 'undefined') {
@ -200,12 +201,12 @@ class Mscript {
//hold generated arr in state loop array
this.loops[this.rec].arr
.push.apply(this.loops[this.rec].arr, this.str_to_arr(line, this.two));
this.loops[this.rec].light
.push.apply(this.loops[this.rec].light, this.light_to_arr(line, this.two));
this.loops[this.rec].meta
.push.apply(this.loops[this.rec].meta, this.light_to_arr(line, this.two));
}
else {
this.arr.push.apply(this.arr, this.str_to_arr(line, this.two));
this.light.push.apply(this.light, this.light_to_arr(line, this.two));
this.meta.push.apply(this.meta, this.light_to_arr(line, this.two));
}
}
/**
@ -218,7 +219,7 @@ class Mscript {
this.rec++;
this.loops[this.rec] = {
arr: [],
light: [],
meta: [],
cam: 0,
proj: 0,
cmd: line + ''
@ -233,29 +234,29 @@ class Mscript {
* @param {string} line Line to interpret
*/
end_loop(line) {
let light_arr;
let meta_arr;
let start;
let end;
let len;
for (let x = 0; x < this.loop_count(this.loops[this.rec].cmd); x++) {
light_arr = this.loops[this.rec].light;
meta_arr = this.loops[this.rec].meta;
if (this.loops[this.rec].fade) {
start = this.loops[this.rec].start;
end = this.loops[this.rec].end;
len = this.loops[this.rec].fade_len;
light_arr = light_arr.map(l => {
meta_arr = meta_arr.map(l => {
return this.fade_rgb(start, end, len, x);
});
}
if (this.rec === 0) {
this.arr.push.apply(this.arr, this.loops[this.rec].arr);
this.light.push.apply(this.light, light_arr);
this.meta.push.apply(this.meta, meta_arr);
}
else if (this.rec >= 1) {
this.loops[this.rec - 1].arr
.push.apply(this.loops[this.rec - 1].arr, this.loops[this.rec].arr);
this.loops[this.rec - 1].light
.push.apply(this.loops[this.rec - 1].light, light_arr);
this.loops[this.rec - 1].meta
.push.apply(this.loops[this.rec - 1].meta, meta_arr);
}
}
this.update('END', this.loop_count(this.loops[this.rec].cmd));
@ -274,7 +275,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BF');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BF');
}
}
@ -282,7 +283,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BB');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BB');
}
}
@ -292,7 +293,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BF');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BF');
}
}
@ -300,7 +301,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BB');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BB');
}
}
@ -318,7 +319,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PF');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PF');
}
}
@ -326,7 +327,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PB');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PB');
}
}
@ -336,7 +337,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PF');
this.light.push('');
this.meta.push('');
this.update('PF');
}
}
@ -344,7 +345,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PB');
this.light.push('');
this.meta.push('');
this.update('PB');
}
}
@ -618,6 +619,13 @@ class Mscript {
const color = str.replace('L ', '').trim();
this.color = color;
}
/**
* Interpret a pause command
*
* @param {string} line String containing pause command
**/
pause(line) {
}
/**
* Throw an error with specific message
*

File diff suppressed because one or more lines are too long

View File

@ -60,7 +60,7 @@ class Mscript {
this.rec = -1;
this.two = '';
this.arr = [];
this.light = [];
this.meta = [];
this.target = 0; //move to target using CAM # or PROJ #
this.dist = 0;
this.variables = {};
@ -125,11 +125,12 @@ class Mscript {
else if (startsWith(line, 'ALERT')) {
}
else if (startsWith(line, 'PAUSE')) {
this.pause(line);
}
}
this.output.success = true;
this.output.arr = this.arr; //all instructions
this.output.light = this.light; //all light instructions
this.output.meta = this.meta; //all metadata for instructions
this.output.cam = this.cam;
this.output.proj = this.proj;
if (typeof callback !== 'undefined') {
@ -200,12 +201,12 @@ class Mscript {
//hold generated arr in state loop array
this.loops[this.rec].arr
.push.apply(this.loops[this.rec].arr, this.str_to_arr(line, this.two));
this.loops[this.rec].light
.push.apply(this.loops[this.rec].light, this.light_to_arr(line, this.two));
this.loops[this.rec].meta
.push.apply(this.loops[this.rec].meta, this.light_to_arr(line, this.two));
}
else {
this.arr.push.apply(this.arr, this.str_to_arr(line, this.two));
this.light.push.apply(this.light, this.light_to_arr(line, this.two));
this.meta.push.apply(this.meta, this.light_to_arr(line, this.two));
}
}
/**
@ -218,7 +219,7 @@ class Mscript {
this.rec++;
this.loops[this.rec] = {
arr: [],
light: [],
meta: [],
cam: 0,
proj: 0,
cmd: line + ''
@ -233,29 +234,29 @@ class Mscript {
* @param {string} line Line to interpret
*/
end_loop(line) {
let light_arr;
let meta_arr;
let start;
let end;
let len;
for (let x = 0; x < this.loop_count(this.loops[this.rec].cmd); x++) {
light_arr = this.loops[this.rec].light;
meta_arr = this.loops[this.rec].meta;
if (this.loops[this.rec].fade) {
start = this.loops[this.rec].start;
end = this.loops[this.rec].end;
len = this.loops[this.rec].fade_len;
light_arr = light_arr.map(l => {
meta_arr = meta_arr.map(l => {
return this.fade_rgb(start, end, len, x);
});
}
if (this.rec === 0) {
this.arr.push.apply(this.arr, this.loops[this.rec].arr);
this.light.push.apply(this.light, light_arr);
this.meta.push.apply(this.meta, meta_arr);
}
else if (this.rec >= 1) {
this.loops[this.rec - 1].arr
.push.apply(this.loops[this.rec - 1].arr, this.loops[this.rec].arr);
this.loops[this.rec - 1].light
.push.apply(this.loops[this.rec - 1].light, light_arr);
this.loops[this.rec - 1].meta
.push.apply(this.loops[this.rec - 1].meta, meta_arr);
}
}
this.update('END', this.loop_count(this.loops[this.rec].cmd));
@ -274,7 +275,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BF');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BF');
}
}
@ -282,7 +283,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BB');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BB');
}
}
@ -292,7 +293,7 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BF');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BF');
}
}
@ -300,7 +301,7 @@ class Mscript {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BB');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BB');
}
}
@ -318,7 +319,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PF');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PF');
}
}
@ -326,7 +327,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PB');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PB');
}
}
@ -336,7 +337,7 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PF');
this.light.push('');
this.meta.push('');
this.update('PF');
}
}
@ -344,7 +345,7 @@ class Mscript {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PB');
this.light.push('');
this.meta.push('');
this.update('PB');
}
}
@ -618,6 +619,13 @@ class Mscript {
const color = str.replace('L ', '').trim();
this.color = color;
}
/**
* Interpret a pause command
*
* @param {string} line String containing pause command
**/
pause(line) {
}
/**
* Throw an error with specific message
*

File diff suppressed because one or more lines are too long

View File

@ -60,7 +60,7 @@ class Mscript {
rec : number;
two : string;
arr : any[];
light : string[];
meta : string[];
target : number;
dist : number;
variables : any;
@ -87,7 +87,7 @@ class Mscript {
this.two = '';
this.arr = [];
this.light = [];
this.meta = [];
this.target = 0; //move to target using CAM # or PROJ #
this.dist = 0;
@ -148,13 +148,13 @@ class Mscript {
} else if (startsWith(line, 'ALERT')) {
} else if (startsWith(line, 'PAUSE')) {
this.pause(line);
}
}
this.output.success = true;
this.output.arr = this.arr; //all instructions
this.output.light = this.light; //all light instructions
this.output.meta = this.meta; //all metadata for instructions
this.output.cam = this.cam;
this.output.proj = this.proj;
@ -232,13 +232,13 @@ class Mscript {
.push.apply(this.loops[this.rec].arr,
this.str_to_arr(line,
this.two));
this.loops[this.rec].light
.push.apply(this.loops[this.rec].light,
this.loops[this.rec].meta
.push.apply(this.loops[this.rec].meta,
this.light_to_arr(line,
this.two));
} else {
this.arr.push.apply(this.arr, this.str_to_arr(line, this.two));
this.light.push.apply(this.light, this.light_to_arr(line, this.two))
this.meta.push.apply(this.meta, this.light_to_arr(line, this.two));
}
}
/**
@ -251,7 +251,7 @@ class Mscript {
this.rec++;
this.loops[this.rec] = {
arr : [],
light : [],
meta : [],
cam : 0,
proj : 0,
cmd : line + ''
@ -266,32 +266,32 @@ class Mscript {
* @param {string} line Line to interpret
*/
end_loop (line : string) {
let light_arr : any[];
let meta_arr : string[];
let start : RGB;
let end : RGB;
let len : number;
for (let x = 0; x < this.loop_count(this.loops[this.rec].cmd); x++) {
light_arr = this.loops[this.rec].light;
meta_arr = this.loops[this.rec].meta;
if (this.loops[this.rec].fade) {
start = this.loops[this.rec].start;
end = this.loops[this.rec].end;
len = this.loops[this.rec].fade_len;
light_arr = light_arr.map(l => {
meta_arr = meta_arr.map(l => {
return this.fade_rgb(start, end, len, x);
})
}
if (this.rec === 0) {
this.arr.push.apply(this.arr, this.loops[this.rec].arr);
this.light.push.apply(this.light, light_arr);
this.meta.push.apply(this.meta, meta_arr);
} else if (this.rec >= 1) {
this.loops[this.rec - 1].arr
.push.apply(this.loops[this.rec - 1].arr,
this.loops[this.rec].arr);
this.loops[this.rec - 1].light
.push.apply(this.loops[this.rec - 1].light,
light_arr);
this.loops[this.rec - 1].meta
.push.apply(this.loops[this.rec - 1].meta,
meta_arr);
}
}
this.update('END', this.loop_count(this.loops[this.rec].cmd));
@ -310,14 +310,14 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BF');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BF');
}
} else {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('BB');
this.loops[this.rec].light.push(BLACK);
this.loops[this.rec].meta.push(BLACK);
this.update('BB');
}
}
@ -326,14 +326,14 @@ class Mscript {
this.dist = this.target - this.cam;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BF');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BF');
}
} else {
this.dist = this.cam - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('BB');
this.light.push(BLACK);
this.meta.push(BLACK);
this.update('BB');
}
}
@ -351,14 +351,14 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PF');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PF');
}
} else {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.loops[this.rec].arr.push('PB');
this.loops[this.rec].light.push('');
this.loops[this.rec].meta.push('');
this.update('PB');
}
}
@ -367,14 +367,14 @@ class Mscript {
this.dist = this.target - this.proj;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PF');
this.light.push('');
this.meta.push('');
this.update('PF');
}
} else {
this.dist = this.proj - this.target;
for (let x = 0; x < this.dist; x++) {
this.arr.push('PB');
this.light.push('');
this.meta.push('');
this.update('PB');
}
}
@ -631,6 +631,15 @@ class Mscript {
this.color = color;
}
/**
* Interpret a pause command
*
* @param {string} line String containing pause command
**/
pause (line : string) {
}
/**
* Throw an error with specific message
*