You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.3KB

  1. #include "AudibleInstruments.hpp"
  2. struct Links : Module {
  3. enum ParamIds {
  4. NUM_PARAMS
  5. };
  6. enum InputIds {
  7. A1_INPUT,
  8. B1_INPUT,
  9. B2_INPUT,
  10. C1_INPUT,
  11. C2_INPUT,
  12. C3_INPUT,
  13. NUM_INPUTS
  14. };
  15. enum OutputIds {
  16. A1_OUTPUT,
  17. A2_OUTPUT,
  18. A3_OUTPUT,
  19. B1_OUTPUT,
  20. B2_OUTPUT,
  21. C1_OUTPUT,
  22. NUM_OUTPUTS
  23. };
  24. enum LightIds {
  25. A_POS_LIGHT, A_NEG_LIGHT,
  26. B_POS_LIGHT, B_NEG_LIGHT,
  27. C_POS_LIGHT, C_NEG_LIGHT,
  28. NUM_LIGHTS
  29. };
  30. Links() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
  31. void step() override;
  32. };
  33. void Links::step() {
  34. float inA = inputs[A1_INPUT].value;
  35. float inB = inputs[B1_INPUT].value + inputs[B2_INPUT].value;
  36. float inC = inputs[C1_INPUT].value + inputs[C2_INPUT].value + inputs[C3_INPUT].value;
  37. outputs[A1_OUTPUT].value = inA;
  38. outputs[A2_OUTPUT].value = inA;
  39. outputs[A3_OUTPUT].value = inA;
  40. outputs[B1_OUTPUT].value = inB;
  41. outputs[B2_OUTPUT].value = inB;
  42. outputs[C1_OUTPUT].value = inC;
  43. lights[A_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0, inA / 5.0));
  44. lights[A_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0, -inA / 5.0));
  45. lights[B_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0, inB / 5.0));
  46. lights[B_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0, -inB / 5.0));
  47. lights[C_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0, inC / 5.0));
  48. lights[C_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0, -inC / 5.0));
  49. }
  50. struct LinksWidget : ModuleWidget {
  51. LinksWidget(Links *module) : ModuleWidget(module) {
  52. #ifdef USE_VST2
  53. setPanel(SVG::load(assetStaticPlugin("AudibleInstruments", "res/Links.svg")));
  54. #else
  55. setPanel(SVG::load(assetPlugin(plugin, "res/Links.svg")));
  56. #endif // USE_VST2
  57. addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
  58. addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
  59. addInput(Port::create<PJ301MPort>(Vec(4, 75), Port::INPUT, module, Links::A1_INPUT));
  60. addOutput(Port::create<PJ301MPort>(Vec(31, 75), Port::OUTPUT, module, Links::A1_OUTPUT));
  61. addOutput(Port::create<PJ301MPort>(Vec(4, 113), Port::OUTPUT, module, Links::A2_OUTPUT));
  62. addOutput(Port::create<PJ301MPort>(Vec(31, 113), Port::OUTPUT, module, Links::A3_OUTPUT));
  63. addInput(Port::create<PJ301MPort>(Vec(4, 177), Port::INPUT, module, Links::B1_INPUT));
  64. addInput(Port::create<PJ301MPort>(Vec(31, 177), Port::INPUT, module, Links::B2_INPUT));
  65. addOutput(Port::create<PJ301MPort>(Vec(4, 214), Port::OUTPUT, module, Links::B1_OUTPUT));
  66. addOutput(Port::create<PJ301MPort>(Vec(31, 214), Port::OUTPUT, module, Links::B2_OUTPUT));
  67. addInput(Port::create<PJ301MPort>(Vec(4, 278), Port::INPUT, module, Links::C1_INPUT));
  68. addInput(Port::create<PJ301MPort>(Vec(31, 278), Port::INPUT, module, Links::C2_INPUT));
  69. addInput(Port::create<PJ301MPort>(Vec(4, 316), Port::INPUT, module, Links::C3_INPUT));
  70. addOutput(Port::create<PJ301MPort>(Vec(31, 316), Port::OUTPUT, module, Links::C1_OUTPUT));
  71. addChild(ModuleLightWidget::create<SmallLight<GreenRedLight>>(Vec(26, 59), module, Links::A_POS_LIGHT));
  72. addChild(ModuleLightWidget::create<SmallLight<GreenRedLight>>(Vec(26, 161), module, Links::B_POS_LIGHT));
  73. addChild(ModuleLightWidget::create<SmallLight<GreenRedLight>>(Vec(26, 262), module, Links::C_POS_LIGHT));
  74. }
  75. };
  76. RACK_PLUGIN_MODEL_INIT(AudibleInstruments, Links) {
  77. Model *modelLinks = Model::create<Links, LinksWidget>("Audible Instruments", "Links", "Multiples", MULTIPLE_TAG, MIXER_TAG);
  78. return modelLinks;
  79. }