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.

133 lines
3.7KB

  1. //**************************************************************************************
  2. //Multiple 2x5 module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS
  3. //
  4. //**************************************************************************************
  5. #include "AS.hpp"
  6. struct Multiple2_5 : Module {
  7. enum ParamIds {
  8. NUM_PARAMS
  9. };
  10. enum InputIds {
  11. INPUT1,
  12. INPUT2,
  13. NUM_INPUTS
  14. };
  15. enum OutputIds {
  16. OUT11,
  17. OUT12,
  18. OUT13,
  19. OUT14,
  20. OUT15,
  21. OUT21,
  22. OUT22,
  23. OUT23,
  24. OUT24,
  25. OUT25,
  26. NUM_OUTPUTS
  27. };
  28. Multiple2_5() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {}
  29. void step() override;
  30. };
  31. void Multiple2_5::step() {
  32. float IN1 = inputs[INPUT1].value;
  33. float IN2 = inputs[INPUT2].value;
  34. // Set outputs
  35. outputs[OUT11].value = IN1;
  36. outputs[OUT12].value = IN1;
  37. outputs[OUT13].value = IN1;
  38. outputs[OUT14].value = IN1;
  39. outputs[OUT15].value = IN1;
  40. outputs[OUT21].value = IN2;
  41. outputs[OUT22].value = IN2;
  42. outputs[OUT23].value = IN2;
  43. outputs[OUT24].value = IN2;
  44. outputs[OUT25].value = IN2;
  45. //Is it necessary to check for active outputs in this case?
  46. /*
  47. if (outputs[OUT11].active) {
  48. outputs[OUT11].value = IN1;
  49. }
  50. if (outputs[OUT12].active) {
  51. outputs[OUT12].value = IN1;
  52. }
  53. if (outputs[OUT13].active) {
  54. outputs[OUT13].value= IN1;
  55. }
  56. if (outputs[OUT14].active) {
  57. outputs[OUT14].value = IN1;
  58. }
  59. if (outputs[OUT15].active) {
  60. outputs[OUT15].value = IN1;
  61. }
  62. if (outputs[OUT21].active) {
  63. outputs[OUT21].value = IN2;
  64. }
  65. if (outputs[OUT22].active) {
  66. outputs[OUT22].value = IN2;
  67. }
  68. if (outputs[OUT23].active) {
  69. outputs[OUT23].value = IN2;
  70. }
  71. if (outputs[OUT24].active) {
  72. outputs[OUT24].value = IN2;
  73. }
  74. if (outputs[OUT25].active) {
  75. outputs[OUT25].value = IN2;
  76. }
  77. */
  78. }
  79. struct Multiple2_5Widget : ModuleWidget
  80. {
  81. Multiple2_5Widget(Multiple2_5 *module);
  82. };
  83. Multiple2_5Widget::Multiple2_5Widget(Multiple2_5 *module) : ModuleWidget(module) {
  84. setPanel(SVG::load(assetPlugin(plugin, "res/Multiple2_5.svg")));
  85. //SCREWS
  86. addChild(Widget::create<as_HexScrew>(Vec(RACK_GRID_WIDTH, 0)));
  87. addChild(Widget::create<as_HexScrew>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  88. addChild(Widget::create<as_HexScrew>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  89. addChild(Widget::create<as_HexScrew>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  90. //INPUTS
  91. addInput(Port::create<as_PJ301MPort>(Vec(8, 65), Port::INPUT, module, Multiple2_5::INPUT1));
  92. addInput(Port::create<as_PJ301MPort>(Vec(43, 65), Port::INPUT, module, Multiple2_5::INPUT2));
  93. //OUTPUTS
  94. addOutput(Port::create<as_PJ301MPort>(Vec(8, 130), Port::OUTPUT, module, Multiple2_5::OUT11));
  95. addOutput(Port::create<as_PJ301MPort>(Vec(43, 130), Port::OUTPUT, module, Multiple2_5::OUT21));
  96. addOutput(Port::create<as_PJ301MPort>(Vec(8, 175), Port::OUTPUT, module, Multiple2_5::OUT12));
  97. addOutput(Port::create<as_PJ301MPort>(Vec(43, 175), Port::OUTPUT, module, Multiple2_5::OUT22));
  98. addOutput(Port::create<as_PJ301MPort>(Vec(8, 220), Port::OUTPUT, module, Multiple2_5::OUT13));
  99. addOutput(Port::create<as_PJ301MPort>(Vec(43, 220), Port::OUTPUT, module, Multiple2_5::OUT23));
  100. addOutput(Port::create<as_PJ301MPort>(Vec(8, 265), Port::OUTPUT, module, Multiple2_5::OUT14));
  101. addOutput(Port::create<as_PJ301MPort>(Vec(43, 265), Port::OUTPUT, module, Multiple2_5::OUT24));
  102. addOutput(Port::create<as_PJ301MPort>(Vec(8, 310), Port::OUTPUT, module, Multiple2_5::OUT15));
  103. addOutput(Port::create<as_PJ301MPort>(Vec(43, 310), Port::OUTPUT, module, Multiple2_5::OUT25));
  104. }
  105. RACK_PLUGIN_MODEL_INIT(AS, Multiple2_5) {
  106. Model *modelMultiple2_5 = Model::create<Multiple2_5, Multiple2_5Widget>("AS", "Multiple2_5", "Multiple 2 x 5", MULTIPLE_TAG, UTILITY_TAG);
  107. return modelMultiple2_5;
  108. }