From d17ff40d02c6f905487a5ec084e08ba54bb2bd34 Mon Sep 17 00:00:00 2001 From: Michael Hetrick Date: Sun, 5 Nov 2017 16:46:03 -0600 Subject: [PATCH] Added Rings Easter Egg --- src/AudibleInstruments.hpp | 1 + src/Rings.cpp | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/AudibleInstruments.hpp b/src/AudibleInstruments.hpp index 743943f..69bdd44 100644 --- a/src/AudibleInstruments.hpp +++ b/src/AudibleInstruments.hpp @@ -42,6 +42,7 @@ struct WarpsWidget : ModuleWidget { struct RingsWidget : ModuleWidget { RingsWidget(); + Menu *createContextMenu() override; }; struct LinksWidget : ModuleWidget { diff --git a/src/Rings.cpp b/src/Rings.cpp index c6bee5c..e51b236 100644 --- a/src/Rings.cpp +++ b/src/Rings.cpp @@ -65,6 +65,8 @@ struct Rings : Module { int polyphonyMode = 0; int model = 0; + bool easterEgg = false; + Rings(); void step() override; @@ -73,6 +75,7 @@ struct Rings : Module { json_object_set_new(rootJ, "polyphony", json_integer(polyphonyMode)); json_object_set_new(rootJ, "model", json_integer(model)); + json_object_set_new(rootJ, "easterEgg", json_integer(int(easterEgg))); return rootJ; } @@ -87,6 +90,11 @@ struct Rings : Module { if (modelJ) { model = json_integer_value(modelJ); } + + json_t *eggJ = json_object_get(rootJ, "easterEgg"); + if (eggJ) { + easterEgg = json_integer_value(eggJ) != 0; + } } void reset() override { @@ -193,9 +201,9 @@ void Rings::step() { // Process audio float out[24]; float aux[24]; - if (0) { - // strummer.Process(NULL, 24, &performance_state); - // string_synth.Process(performance_state, patch, in, out, aux, 24); + if (easterEgg) { + strummer.Process(NULL, 24, &performance_state); + string_synth.Process(performance_state, patch, in, out, aux, 24); } else { strummer.Process(in, 24, &performance_state); @@ -283,3 +291,27 @@ RingsWidget::RingsWidget() { addChild(createLight>(Vec(38, 43.8), module, Rings::POLYPHONY_GREEN_LIGHT)); addChild(createLight>(Vec(163, 43.8), module, Rings::RESONATOR_GREEN_LIGHT)); } + + +struct RingsEasterEggItem : MenuItem { + Rings *rings; + void onAction(EventAction &e) override { + rings->easterEgg = !rings->easterEgg; + } + void step() override { + rightText = (rings->easterEgg) ? "✔" : ""; + } +}; + +Menu *RingsWidget::createContextMenu() { + Menu *menu = ModuleWidget::createContextMenu(); + + Rings *rings = dynamic_cast(module); + assert(rings); + + menu->pushChild(construct()); + menu->pushChild(construct(&MenuEntry::text, "Options")); + menu->pushChild(construct(&MenuEntry::text, "Easter Egg", &RingsEasterEggItem::rings, rings)); + + return menu; +} \ No newline at end of file