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.

93 lines
2.8KB

  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. LinksWidget::LinksWidget() {
  51. Links *module = new Links();
  52. setModule(module);
  53. box.size = Vec(15*4, 380);
  54. {
  55. Panel *panel = new LightPanel();
  56. panel->backgroundImage = Image::load(assetPlugin(plugin, "res/Links.png"));
  57. panel->box.size = box.size;
  58. addChild(panel);
  59. }
  60. addChild(createScrew<ScrewSilver>(Vec(15, 0)));
  61. addChild(createScrew<ScrewSilver>(Vec(15, 365)));
  62. addInput(createInput<PJ301MPort>(Vec(4, 75), module, Links::A1_INPUT));
  63. addOutput(createOutput<PJ301MPort>(Vec(31, 75), module, Links::A1_OUTPUT));
  64. addOutput(createOutput<PJ301MPort>(Vec(4, 113), module, Links::A2_OUTPUT));
  65. addOutput(createOutput<PJ301MPort>(Vec(31, 113), module, Links::A3_OUTPUT));
  66. addInput(createInput<PJ301MPort>(Vec(4, 177), module, Links::B1_INPUT));
  67. addInput(createInput<PJ301MPort>(Vec(31, 177), module, Links::B2_INPUT));
  68. addOutput(createOutput<PJ301MPort>(Vec(4, 214), module, Links::B1_OUTPUT));
  69. addOutput(createOutput<PJ301MPort>(Vec(31, 214), module, Links::B2_OUTPUT));
  70. addInput(createInput<PJ301MPort>(Vec(4, 278), module, Links::C1_INPUT));
  71. addInput(createInput<PJ301MPort>(Vec(31, 278), module, Links::C2_INPUT));
  72. addInput(createInput<PJ301MPort>(Vec(4, 316), module, Links::C3_INPUT));
  73. addOutput(createOutput<PJ301MPort>(Vec(31, 316), module, Links::C1_OUTPUT));
  74. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 59), module, Links::A_POS_LIGHT));
  75. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 161), module, Links::B_POS_LIGHT));
  76. addChild(createLight<SmallLight<GreenRedLight>>(Vec(26, 262), module, Links::C_POS_LIGHT));
  77. }