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.

75 lines
2.2KB

  1. #include "common.hpp"
  2. #include "switch.hpp"
  3. namespace rack_plugin_TheXOR {
  4. void Switch::step()
  5. {
  6. for(int k = 0; k < NUM_SWITCHES; k++)
  7. {
  8. if(outputs[OUT_1 + k].active && inputs[IN_1 + k].active)
  9. {
  10. if(getSwitch(k))
  11. {
  12. lights[LED_1 + k].value = 5;;
  13. outputs[OUT_1 + k].value = inputs[IN_1 + k].value;
  14. } else
  15. {
  16. lights[LED_1 + k].value = outputs[OUT_1 + k].value = 0;
  17. }
  18. } else
  19. {
  20. lights[LED_1 + k].value = outputs[OUT_1 + k].value = 0;
  21. }
  22. }
  23. }
  24. SwitchWidget::SwitchWidget(Switch *module) : ModuleWidget(module)
  25. {
  26. box.size = Vec(10 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
  27. {
  28. SVGPanel *panel = new SVGPanel();
  29. panel->box.size = box.size;
  30. panel->setBackground(SVG::load(assetPlugin(plugin, "res/modules/Switch.svg")));
  31. addChild(panel);
  32. }
  33. addChild(Widget::create<ScrewBlack>(Vec(RACK_GRID_WIDTH, 0)));
  34. addChild(Widget::create<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0)));
  35. addChild(Widget::create<ScrewBlack>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  36. addChild(Widget::create<ScrewBlack>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH)));
  37. float in_x = mm2px(2.500);
  38. float mod_x = mm2px(17.306);
  39. float sw_x = mm2px(25.027);
  40. float led_x = mm2px(28.173);
  41. float out_x = mm2px(40.045);
  42. float y = 101.567;
  43. float y1 = 98.387;
  44. float yled = 114.949;
  45. float ysw = 105.667;
  46. float delta_y = 79.394 - 101.567;
  47. for(int k = 0; k < NUM_SWITCHES; k++)
  48. {
  49. addInput(Port::create<PJ301GRPort>(Vec(in_x, yncscape(y, 8.255)), Port::INPUT, module, Switch::IN_1 + k));
  50. addInput(Port::create<PJ301BPort>(Vec(mod_x, yncscape(y1, 8.255)), Port::INPUT, module, Switch::MOD_1 + k));
  51. addParam(ParamWidget::create<NKK2>(Vec(sw_x, yncscape(ysw, 7.336)), module, Switch::SW_1+k, 0.0, 1.0, 0.0));
  52. addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(led_x, yncscape(yled, 2.176)), module, Switch::LED_1 + k ));
  53. addOutput(Port::create<PJ301GPort>(Vec(out_x, yncscape(y, 8.255)), Port::OUTPUT, module, Switch::OUT_1+k));
  54. y += delta_y;
  55. y1 += delta_y;
  56. ysw += delta_y;
  57. yled += delta_y;
  58. }
  59. }
  60. } // namespace rack_plugin_TheXOR
  61. using namespace rack_plugin_TheXOR;
  62. RACK_PLUGIN_MODEL_INIT(TheXOR, Switch) {
  63. return Model::create<Switch, SwitchWidget>("TheXOR", "Switch", "Switch", SWITCH_TAG);
  64. }