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.

152 lines
4.2KB

  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. /* Update suggested by MarcBrule
  41. If the input 2 is not active the second row of outputs takes the value of input 1
  42. so the module becomes a multi 1 x 10, nice and simple idea!
  43. */
  44. if(!inputs[INPUT2].active){
  45. outputs[OUT21].value = IN1;
  46. outputs[OUT22].value = IN1;
  47. outputs[OUT23].value = IN1;
  48. outputs[OUT24].value = IN1;
  49. outputs[OUT25].value = IN1;
  50. }else{
  51. outputs[OUT21].value = IN2;
  52. outputs[OUT22].value = IN2;
  53. outputs[OUT23].value = IN2;
  54. outputs[OUT24].value = IN2;
  55. outputs[OUT25].value = IN2;
  56. }
  57. /*
  58. outputs[OUT21].value = IN2;
  59. outputs[OUT22].value = IN2;
  60. outputs[OUT23].value = IN2;
  61. outputs[OUT24].value = IN2;
  62. outputs[OUT25].value = IN2;
  63. */
  64. //Is it necessary to check for active outputs in this case?
  65. /*
  66. if (outputs[OUT11].active) {
  67. outputs[OUT11].value = IN1;
  68. }
  69. if (outputs[OUT12].active) {
  70. outputs[OUT12].value = IN1;
  71. }
  72. if (outputs[OUT13].active) {
  73. outputs[OUT13].value= IN1;
  74. }
  75. if (outputs[OUT14].active) {
  76. outputs[OUT14].value = IN1;
  77. }
  78. if (outputs[OUT15].active) {
  79. outputs[OUT15].value = IN1;
  80. }
  81. if (outputs[OUT21].active) {
  82. outputs[OUT21].value = IN2;
  83. }
  84. if (outputs[OUT22].active) {
  85. outputs[OUT22].value = IN2;
  86. }
  87. if (outputs[OUT23].active) {
  88. outputs[OUT23].value = IN2;
  89. }
  90. if (outputs[OUT24].active) {
  91. outputs[OUT24].value = IN2;
  92. }
  93. if (outputs[OUT25].active) {
  94. outputs[OUT25].value = IN2;
  95. }
  96. */
  97. }
  98. struct Multiple2_5Widget : ModuleWidget
  99. {
  100. Multiple2_5Widget(Multiple2_5 *module);
  101. };
  102. Multiple2_5Widget::Multiple2_5Widget(Multiple2_5 *module) : ModuleWidget(module) {
  103. setPanel(SVG::load(assetPlugin(plugin, "res/Multiple2_5.svg")));
  104. //SCREWS
  105. addChild(Widget::create<as_HexScrew>(Vec(RACK_GRID_WIDTH, 0)));
  106. addChild(Widget::create<as_HexScrew>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  107. addChild(Widget::create<as_HexScrew>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  108. addChild(Widget::create<as_HexScrew>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  109. //INPUTS
  110. addInput(Port::create<as_PJ301MPort>(Vec(8, 65), Port::INPUT, module, Multiple2_5::INPUT1));
  111. addInput(Port::create<as_PJ301MPort>(Vec(43, 65), Port::INPUT, module, Multiple2_5::INPUT2));
  112. //OUTPUTS
  113. addOutput(Port::create<as_PJ301MPort>(Vec(8, 130), Port::OUTPUT, module, Multiple2_5::OUT11));
  114. addOutput(Port::create<as_PJ301MPort>(Vec(43, 130), Port::OUTPUT, module, Multiple2_5::OUT21));
  115. addOutput(Port::create<as_PJ301MPort>(Vec(8, 175), Port::OUTPUT, module, Multiple2_5::OUT12));
  116. addOutput(Port::create<as_PJ301MPort>(Vec(43, 175), Port::OUTPUT, module, Multiple2_5::OUT22));
  117. addOutput(Port::create<as_PJ301MPort>(Vec(8, 220), Port::OUTPUT, module, Multiple2_5::OUT13));
  118. addOutput(Port::create<as_PJ301MPort>(Vec(43, 220), Port::OUTPUT, module, Multiple2_5::OUT23));
  119. addOutput(Port::create<as_PJ301MPort>(Vec(8, 265), Port::OUTPUT, module, Multiple2_5::OUT14));
  120. addOutput(Port::create<as_PJ301MPort>(Vec(43, 265), Port::OUTPUT, module, Multiple2_5::OUT24));
  121. addOutput(Port::create<as_PJ301MPort>(Vec(8, 310), Port::OUTPUT, module, Multiple2_5::OUT15));
  122. addOutput(Port::create<as_PJ301MPort>(Vec(43, 310), Port::OUTPUT, module, Multiple2_5::OUT25));
  123. }
  124. RACK_PLUGIN_MODEL_INIT(AS, Multiple2_5) {
  125. Model *modelMultiple2_5 = Model::create<Multiple2_5, Multiple2_5Widget>("AS", "Multiple2_5", "Multiple 2 x 5", MULTIPLE_TAG, UTILITY_TAG);
  126. return modelMultiple2_5;
  127. }