Browse Source

Merge Sheep into Tides with a context menu item

tags/v0.5.0
Andrew Belt 7 years ago
parent
commit
72c8e0f3c4
3 changed files with 52 additions and 17 deletions
  1. +1
    -2
      src/AudibleInstruments.cpp
  2. +4
    -4
      src/AudibleInstruments.hpp
  3. +47
    -11
      src/Tides.cpp

+ 1
- 2
src/AudibleInstruments.cpp View File

@@ -13,9 +13,8 @@ void init(rack::Plugin *p) {
p->addModel(createModel<BraidsWidget>("Audible Instruments", "Braids", "Macro Oscillator", OSCILLATOR_TAG, WAVESHAPER_TAG));
p->addModel(createModel<ElementsWidget>("Audible Instruments", "Elements", "Modal Synthesizer", REVERB_TAG));
p->addModel(createModel<TidesWidget>("Audible Instruments", "Tides", "Tidal Modulator", LFO_TAG, OSCILLATOR_TAG, WAVESHAPER_TAG, FUNCTION_GENERATOR_TAG));
// p->addModel(createModel<StreamsWidget>("Audible Instruments", "Streams", "Dual Dynamics Gate"));
p->addModel(createModel<CloudsWidget>("Audible Instruments", "Clouds", "Texture Synthesizer", GRANULAR_TAG, REVERB_TAG));
p->addModel(createModel<WarpsWidget>("Audible Instruments", "Warps", "Meta Modulator", RING_MODULATOR_TAG));
p->addModel(createModel<WarpsWidget>("Audible Instruments", "Warps", "Meta Modulator", RING_MODULATOR_TAG, WAVESHAPER_TAG));
p->addModel(createModel<RingsWidget>("Audible Instruments", "Rings", "Resonator"));
p->addModel(createModel<LinksWidget>("Audible Instruments", "Links", "Multiples", MULTIPLE_TAG, MIXER_TAG));
p->addModel(createModel<KinksWidget>("Audible Instruments", "Kinks", "Utilities", UTILITY_TAG));


+ 4
- 4
src/AudibleInstruments.hpp View File

@@ -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 {


+ 47
- 11
src/Tides.cpp View File

@@ -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<ScrewSilver>(Vec(15, 0)));
@@ -233,13 +245,37 @@ TidesWidget::TidesWidget() {
addChild(createLight<MediumLight<GreenRedLight>>(Vec(56, 102), module, Tides::RANGE_GREEN_LIGHT));
}

void TidesWidget::step() {
Tides *tides = dynamic_cast<Tides*>(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<Tides*>(module);
assert(tides);
tides->wavetableHack = true;

Panel *panel = getFirstDescendantOfType<Panel>();
assert(panel);
panel->backgroundImage = Image::load(assetPlugin(plugin, "res/Sheep.png"));
menu->pushChild(construct<MenuEntry>());
menu->pushChild(construct<TidesSheepItem>(&MenuEntry::text, "Sheep", &TidesSheepItem::tides, tides));

return menu;
}

Loading…
Cancel
Save