#include "Bool.hpp" void Bool::step() { bool a = inputs[A_INPUT].value > 1.0f; bool b = inputs[B_INPUT].value > 1.0f; outputs[AND_OUTPUT].value = a && b ? 5.0f : 0.0f; outputs[OR_OUTPUT].value = a || b ? 5.0f : 0.0f; outputs[XOR_OUTPUT].value = a ^ b ? 5.0f : 0.0f; outputs[NOT_OUTPUT].value = (inputs[NOT_INPUT].active && inputs[NOT_INPUT].value > 1.0f) ? 0.0f : 5.0f; } struct BoolWidget : ModuleWidget { static constexpr int hp = 3; BoolWidget(Bool* module) : ModuleWidget(module) { box.size = Vec(RACK_GRID_WIDTH * hp, RACK_GRID_HEIGHT); { SVGPanel *panel = new SVGPanel(); panel->box.size = box.size; panel->setBackground(SVG::load(assetPlugin(plugin, "res/Bool.svg"))); addChild(panel); } addChild(Widget::create(Vec(0, 0))); addChild(Widget::create(Vec(box.size.x - 15, 365))); // generated by svg_widgets.rb auto aInputPosition = Vec(10.5, 23.0); auto bInputPosition = Vec(10.5, 53.0); auto notInputPosition = Vec(10.5, 221.0); auto andOutputPosition = Vec(10.5, 86.0); auto orOutputPosition = Vec(10.5, 126.0); auto xorOutputPosition = Vec(10.5, 166.0); auto notOutputPosition = Vec(10.5, 254.0); // end generated by svg_widgets.rb addInput(Port::create(aInputPosition, Port::INPUT, module, Bool::A_INPUT)); addInput(Port::create(bInputPosition, Port::INPUT, module, Bool::B_INPUT)); addInput(Port::create(notInputPosition, Port::INPUT, module, Bool::NOT_INPUT)); addOutput(Port::create(andOutputPosition, Port::OUTPUT, module, Bool::AND_OUTPUT)); addOutput(Port::create(orOutputPosition, Port::OUTPUT, module, Bool::OR_OUTPUT)); addOutput(Port::create(xorOutputPosition, Port::OUTPUT, module, Bool::XOR_OUTPUT)); addOutput(Port::create(notOutputPosition, Port::OUTPUT, module, Bool::NOT_OUTPUT)); } }; RACK_PLUGIN_MODEL_INIT(Bogaudio, Bool) { Model *modelBool = createModel("Bogaudio-Bool", "Bool", "boolean logic", LOGIC_TAG); return modelBool; }