#include "Sums.hpp" void Sums::step() { float a = inputs[A_INPUT].value; float b = inputs[B_INPUT].value; if (_disableOutputLimit) { outputs[SUM_OUTPUT].value = a + b, outputs[DIFFERENCE_OUTPUT].value = a - b; outputs[MAX_OUTPUT].value = std::max(a, b); outputs[MIN_OUTPUT].value = std::min(a, b); if (inputs[NEGATE_INPUT].active) { outputs[NEGATE_OUTPUT].value = -inputs[NEGATE_INPUT].value; } else { outputs[NEGATE_OUTPUT].value = 0.0f; } } else { outputs[SUM_OUTPUT].value = clamp(a + b, -12.0f, 12.0f); outputs[DIFFERENCE_OUTPUT].value = clamp(a - b, -12.0f, 12.0f); outputs[MAX_OUTPUT].value = clamp(std::max(a, b), -12.0f, 12.0f); outputs[MIN_OUTPUT].value = clamp(std::min(a, b), -12.0f, 12.0f); if (inputs[NEGATE_INPUT].active) { outputs[NEGATE_OUTPUT].value = clamp(-inputs[NEGATE_INPUT].value, -12.0f, 12.0f); } else { outputs[NEGATE_OUTPUT].value = 0.0f; } } } struct SumsWidget : DisableOutputLimitModuleWidget { static constexpr int hp = 3; SumsWidget(Sums* module) : DisableOutputLimitModuleWidget(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/Sums.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 negateInputPosition = Vec(10.5, 262.0); auto sumOutputPosition = Vec(10.5, 86.0); auto differenceOutputPosition = Vec(10.5, 126.0); auto maxOutputPosition = Vec(10.5, 166.0); auto minOutputPosition = Vec(10.5, 206.0); auto negateOutputPosition = Vec(10.5, 295.0); // end generated by svg_widgets.rb addInput(Port::create(aInputPosition, Port::INPUT, module, Sums::A_INPUT)); addInput(Port::create(bInputPosition, Port::INPUT, module, Sums::B_INPUT)); addInput(Port::create(negateInputPosition, Port::INPUT, module, Sums::NEGATE_INPUT)); addOutput(Port::create(sumOutputPosition, Port::OUTPUT, module, Sums::SUM_OUTPUT)); addOutput(Port::create(differenceOutputPosition, Port::OUTPUT, module, Sums::DIFFERENCE_OUTPUT)); addOutput(Port::create(maxOutputPosition, Port::OUTPUT, module, Sums::MAX_OUTPUT)); addOutput(Port::create(minOutputPosition, Port::OUTPUT, module, Sums::MIN_OUTPUT)); addOutput(Port::create(negateOutputPosition, Port::OUTPUT, module, Sums::NEGATE_OUTPUT)); } }; RACK_PLUGIN_MODEL_INIT(Bogaudio, Sums) { Model *modelSums = createModel("Bogaudio-Sums", "Sums", "arithmetic logic", LOGIC_TAG); return modelSums; }