#include "common.hpp" //////////////////// // module widgets //////////////////// using namespace rack; #define plugin "TheXOR" namespace rack_plugin_TheXOR { #define NUM_MPLEX_INPUTS (8) struct Mplex; struct MplexWidget : ModuleWidget { MplexWidget(Mplex * module); private: float yncscape(float y, float height) { return RACK_GRID_HEIGHT - mm2px(y + height); } }; struct Mplex : Module { enum ParamIds { BTUP, BTDN, NUM_PARAMS }; enum InputIds { INUP, INDN, IN_1, NUM_INPUTS = IN_1 + NUM_MPLEX_INPUTS }; enum OutputIds { OUT_1, NUM_OUTPUTS }; enum LightIds { LED_1, NUM_LIGHTS = LED_1 + NUM_MPLEX_INPUTS }; Mplex() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { load(); } void fromJson(json_t *root) override { Module::fromJson(root); on_loaded(); } json_t *toJson() override { json_t *rootJ = json_object(); return rootJ; } void step() override; void reset() override { load(); } void randomize() override { set_output((int)roundf(rescale(randomUniform(), 0.0, 1.0, 0, NUM_MPLEX_INPUTS))); } private: void load(); void on_loaded(); void set_output(int n); int cur_sel; SchmittTrigger upTrigger; SchmittTrigger dnTrigger; }; } // namespace rack_plugin_TheXOR