Browse Source

Add "Reload script" menu item. Add hello.js.

tags/v1.1.0
Andrew Belt 5 years ago
parent
commit
00d8fb787d
3 changed files with 62 additions and 18 deletions
  1. +38
    -0
      examples/hello.js
  2. +0
    -14
      examples/rainbow.js
  3. +24
    -4
      src/Prototype.cpp

+ 38
- 0
examples/hello.js View File

@@ -0,0 +1,38 @@
// Call process() every 128 audio samples
config.frameDivider = 128


// From https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_RGB
function hsvToRgb(h, s, v) {
h *= 6
var c = v * s
var x = c * (1 - Math.abs(h % 2 - 1))
var rgb;
if (h < 1) rgb = [c, x, 0]
else if (h < 2) rgb = [x, c, 0]
else if (h < 3) rgb = [0, c, x]
else if (h < 4) rgb = [0, x, c]
else if (h < 5) rgb = [x, 0, c]
else rgb = [c, 0, x]
var m = v - c
return {r: rgb[0] + m, g: rgb[1] + m, b: rgb[2] + m}
}


var phase = 0
function process(args) {
phase += args.sampleTime * config.frameDivider * 0.5
phase %= 1

for (var i = 0; i < 6; i++) {
var h = (i / 6 + phase) % 1
var rgb = hsvToRgb(h, 1, 1)
args.lights[i] = rgb
args.switchLights[i] = rgb
args.outputs[i] = Math.sin(2 * Math.PI * h) * 10
}

display(phase)
}

display("Hello, world!")

+ 0
- 14
examples/rainbow.js View File

@@ -1,14 +0,0 @@
config.frameDivider = 1

function process(block) {
for (var i = 0; i < 6; i++) {
var v = block.inputs[i]
v *= block.knobs[i]
block.outputs[i] = v
block.lights[i].r = 1
block.switchLights[i].g = 1
block.switchLights[i].b = 1
}
}

display("Hello, world!")

+ 24
- 4
src/Prototype.cpp View File

@@ -56,10 +56,6 @@ struct Prototype : Module {
clearScriptEngine();
}

void onReset() override {
setScriptString(path, script);
}

void process(const ProcessArgs& args) override {
if (!scriptEngine)
return;
@@ -155,6 +151,7 @@ struct Prototype : Module {
this->script = buffer.str();
}
catch (const std::runtime_error& err) {
WARN("Script %s not found, using stored script string", this->path.c_str());
}
// Run script
if (this->script == "") {
@@ -187,6 +184,10 @@ struct Prototype : Module {
setScriptString(path, script);
}
}

void reloadScript() {
setScriptString(path, script);
}
};


@@ -264,6 +265,14 @@ struct PrototypeDisplay : LedDisplay {
};


struct ReloadScriptItem : MenuItem {
Prototype* module;
void onAction(const event::Action& e) override {
module->reloadScript();
}
};


struct PrototypeWidget : ModuleWidget {
PrototypeWidget(Prototype* module) {
setModule(module);
@@ -318,6 +327,17 @@ struct PrototypeWidget : ModuleWidget {
display->setModule(module);
addChild(display);
}

void appendContextMenu(Menu* menu) override {
Prototype* module = dynamic_cast<Prototype*>(this->module);

menu->addChild(new MenuEntry);

ReloadScriptItem* reloadScriptItem = createMenuItem<ReloadScriptItem>("Reload script");
reloadScriptItem->module = module;
menu->addChild(reloadScriptItem);
}

};




Loading…
Cancel
Save