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.

90 lines
3.0KB

  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() {
  31. config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
  32. }
  33. void process(const ProcessArgs &args) {
  34. float inA = inputs[A1_INPUT].getVoltage();
  35. float inB = inputs[B1_INPUT].getVoltage() + inputs[B2_INPUT].getVoltage();
  36. float inC = inputs[C1_INPUT].getVoltage() + inputs[C2_INPUT].getVoltage() + inputs[C3_INPUT].getVoltage();
  37. outputs[A1_OUTPUT].setVoltage(inA);
  38. outputs[A2_OUTPUT].setVoltage(inA);
  39. outputs[A3_OUTPUT].setVoltage(inA);
  40. outputs[B1_OUTPUT].setVoltage(inB);
  41. outputs[B2_OUTPUT].setVoltage(inB);
  42. outputs[C1_OUTPUT].setVoltage(inC);
  43. lights[A_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inA / 5.0), args.sampleTime);
  44. lights[A_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inA / 5.0), args.sampleTime);
  45. lights[B_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inB / 5.0), args.sampleTime);
  46. lights[B_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inB / 5.0), args.sampleTime);
  47. lights[C_POS_LIGHT].setSmoothBrightness(fmaxf(0.0, inC / 5.0), args.sampleTime);
  48. lights[C_NEG_LIGHT].setSmoothBrightness(fmaxf(0.0, -inC / 5.0), args.sampleTime);
  49. }
  50. };
  51. struct LinksWidget : ModuleWidget {
  52. LinksWidget(Links *module) {
  53. setModule(module);
  54. setPanel(APP->window->loadSvg(asset::plugin(pluginInstance, "res/Links.svg")));
  55. addChild(createWidget<ScrewSilver>(Vec(15, 0)));
  56. addChild(createWidget<ScrewSilver>(Vec(15, 365)));
  57. addInput(createInput<PJ301MPort>(Vec(4, 75), module, Links::A1_INPUT));
  58. addOutput(createOutput<PJ301MPort>(Vec(31, 75), module, Links::A1_OUTPUT));
  59. addOutput(createOutput<PJ301MPort>(Vec(4, 113), module, Links::A2_OUTPUT));
  60. addOutput(createOutput<PJ301MPort>(Vec(31, 113), module, Links::A3_OUTPUT));
  61. addInput(createInput<PJ301MPort>(Vec(4, 177), module, Links::B1_INPUT));
  62. addInput(createInput<PJ301MPort>(Vec(31, 177), module, Links::B2_INPUT));
  63. addOutput(createOutput<PJ301MPort>(Vec(4, 214), module, Links::B1_OUTPUT));
  64. addOutput(createOutput<PJ301MPort>(Vec(31, 214), module, Links::B2_OUTPUT));
  65. addInput(createInput<PJ301MPort>(Vec(4, 278), module, Links::C1_INPUT));
  66. addInput(createInput<PJ301MPort>(Vec(31, 278), module, Links::C2_INPUT));
  67. addInput(createInput<PJ301MPort>(Vec(4, 316), module, Links::C3_INPUT));
  68. addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Links::C1_OUTPUT));
  69. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 59), module, Links::A_POS_LIGHT));
  70. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 161), module, Links::B_POS_LIGHT));
  71. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 262), module, Links::C_POS_LIGHT));
  72. }
  73. };
  74. Model *modelLinks = createModel<Links, LinksWidget>("Links");