From 00d8fb787d503c413b377c2411bccde8eaed01ea Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Sun, 15 Sep 2019 00:07:54 -0400 Subject: [PATCH] Add "Reload script" menu item. Add hello.js. --- examples/hello.js | 38 ++++++++++++++++++++++++++++++++++++++ examples/rainbow.js | 14 -------------- src/Prototype.cpp | 28 ++++++++++++++++++++++++---- 3 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 examples/hello.js delete mode 100644 examples/rainbow.js diff --git a/examples/hello.js b/examples/hello.js new file mode 100644 index 0000000..3f79a95 --- /dev/null +++ b/examples/hello.js @@ -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!") diff --git a/examples/rainbow.js b/examples/rainbow.js deleted file mode 100644 index 1053461..0000000 --- a/examples/rainbow.js +++ /dev/null @@ -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!") diff --git a/src/Prototype.cpp b/src/Prototype.cpp index 672627b..97f7471 100644 --- a/src/Prototype.cpp +++ b/src/Prototype.cpp @@ -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(this->module); + + menu->addChild(new MenuEntry); + + ReloadScriptItem* reloadScriptItem = createMenuItem("Reload script"); + reloadScriptItem->module = module; + menu->addChild(reloadScriptItem); + } + };