diff --git a/src/AudibleInstruments.cpp b/src/AudibleInstruments.cpp index 5486671..11da9ed 100644 --- a/src/AudibleInstruments.cpp +++ b/src/AudibleInstruments.cpp @@ -13,9 +13,8 @@ void init(rack::Plugin *p) { p->addModel(createModel("Audible Instruments", "Braids", "Macro Oscillator", OSCILLATOR_TAG, WAVESHAPER_TAG)); p->addModel(createModel("Audible Instruments", "Elements", "Modal Synthesizer", REVERB_TAG)); p->addModel(createModel("Audible Instruments", "Tides", "Tidal Modulator", LFO_TAG, OSCILLATOR_TAG, WAVESHAPER_TAG, FUNCTION_GENERATOR_TAG)); - // p->addModel(createModel("Audible Instruments", "Streams", "Dual Dynamics Gate")); p->addModel(createModel("Audible Instruments", "Clouds", "Texture Synthesizer", GRANULAR_TAG, REVERB_TAG)); - p->addModel(createModel("Audible Instruments", "Warps", "Meta Modulator", RING_MODULATOR_TAG)); + p->addModel(createModel("Audible Instruments", "Warps", "Meta Modulator", RING_MODULATOR_TAG, WAVESHAPER_TAG)); p->addModel(createModel("Audible Instruments", "Rings", "Resonator")); p->addModel(createModel("Audible Instruments", "Links", "Multiples", MULTIPLE_TAG, MIXER_TAG)); p->addModel(createModel("Audible Instruments", "Kinks", "Utilities", UTILITY_TAG)); diff --git a/src/AudibleInstruments.hpp b/src/AudibleInstruments.hpp index f8da3cc..1f1b40a 100644 --- a/src/AudibleInstruments.hpp +++ b/src/AudibleInstruments.hpp @@ -21,11 +21,11 @@ struct ElementsWidget : ModuleWidget { }; struct TidesWidget : ModuleWidget { + Panel *tidesPanel; + Panel *sheepPanel; TidesWidget(); -}; - -struct SheepWidget : TidesWidget { - SheepWidget(); + void step() override; + Menu *createContextMenu() override; }; struct StreamsWidget : ModuleWidget { diff --git a/src/Tides.cpp b/src/Tides.cpp index 714fb94..797d2c3 100644 --- a/src/Tides.cpp +++ b/src/Tides.cpp @@ -46,7 +46,7 @@ struct Tides : Module { NUM_LIGHTS }; - bool wavetableHack = false; + bool sheep = false; tides::Generator generator; int frame = 0; uint8_t lastGate; @@ -72,6 +72,7 @@ struct Tides : Module { json_object_set_new(rootJ, "mode", json_integer((int) generator.mode())); json_object_set_new(rootJ, "range", json_integer((int) generator.range())); + json_object_set_new(rootJ, "sheep", json_boolean(sheep)); return rootJ; } @@ -86,6 +87,11 @@ struct Tides : Module { if (rangeJ) { generator.set_range((tides::GeneratorRange) json_integer_value(rangeJ)); } + + json_t *sheepJ = json_object_get(rootJ, "sheep"); + if (sheepJ) { + sheep = json_boolean_value(sheepJ); + } } }; @@ -141,7 +147,7 @@ void Tides::step() { generator.set_sync(inputs[CLOCK_INPUT].active); // Generator - generator.Process(wavetableHack); + generator.Process(sheep); } // Level @@ -191,10 +197,16 @@ TidesWidget::TidesWidget() { box.size = Vec(15 * 14, 380); { - Panel *panel = new LightPanel(); - panel->backgroundImage = Image::load(assetPlugin(plugin, "res/Tides.png")); - panel->box.size = box.size; - addChild(panel); + tidesPanel = new LightPanel(); + tidesPanel->backgroundImage = Image::load(assetPlugin(plugin, "res/Tides.png")); + tidesPanel->box.size = box.size; + addChild(tidesPanel); + } + { + sheepPanel = new LightPanel(); + sheepPanel->backgroundImage = Image::load(assetPlugin(plugin, "res/Sheep.png")); + sheepPanel->box.size = box.size; + addChild(sheepPanel); } addChild(createScrew(Vec(15, 0))); @@ -233,13 +245,37 @@ TidesWidget::TidesWidget() { addChild(createLight>(Vec(56, 102), module, Tides::RANGE_GREEN_LIGHT)); } +void TidesWidget::step() { + Tides *tides = dynamic_cast(module); + assert(tides); + + tidesPanel->visible = !tides->sheep; + sheepPanel->visible = tides->sheep; + + ModuleWidget::step(); +} + + +struct TidesSheepItem : MenuItem { + Tides *tides; + void onAction(EventAction &e) override { + tides->sheep ^= true; + } + void step() override { + rightText = (tides->sheep) ? "✔" : ""; + MenuItem::step(); + } +}; + + +Menu *TidesWidget::createContextMenu() { + Menu *menu = ModuleWidget::createContextMenu(); -SheepWidget::SheepWidget() { Tides *tides = dynamic_cast(module); assert(tides); - tides->wavetableHack = true; - Panel *panel = getFirstDescendantOfType(); - assert(panel); - panel->backgroundImage = Image::load(assetPlugin(plugin, "res/Sheep.png")); + menu->pushChild(construct()); + menu->pushChild(construct(&MenuEntry::text, "Sheep", &TidesSheepItem::tides, tides)); + + return menu; }