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.

66 lines
1.7KB

  1. #include "NauModular.hpp"
  2. namespace rack_plugin_NauModular {
  3. struct Tension : Module{
  4. enum ParamIds{
  5. VOLT_PARAM,
  6. NUM_PARAMS
  7. };
  8. enum InputIds{
  9. NUM_INPUTS
  10. };
  11. enum OutputIds{
  12. VOLT_OUTPUT,
  13. NUM_OUTPUTS
  14. };
  15. enum LightIds{
  16. BLINK_LIGHT,
  17. NUM_LIGHTS
  18. };
  19. Tension() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS){}
  20. void step() override;
  21. };
  22. void Tension::step(){
  23. float v = params[VOLT_PARAM].value;
  24. outputs[VOLT_OUTPUT].value = v;
  25. lights[BLINK_LIGHT].value = fabs(v)/12.0;
  26. }
  27. struct TensionWidget : ModuleWidget{
  28. TensionWidget(Tension *module);
  29. };
  30. TensionWidget::TensionWidget(Tension *module) : ModuleWidget(module){
  31. box.size = Vec(6*RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
  32. {
  33. SVGPanel * panel = new SVGPanel();
  34. panel->box.size = box.size;
  35. panel->setBackground(SVG::load(assetPlugin(plugin, "res/Tension.svg")));
  36. addChild(panel);
  37. }
  38. addChild(Widget::create<ScrewSilver>(Vec(15,0)));
  39. addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30,0)));
  40. addChild(Widget::create<ScrewSilver>(Vec(15,365)));
  41. addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30,365)));
  42. addParam(ParamWidget::create<Davies1900hBlackKnob>(Vec(28, 87), module, Tension::VOLT_PARAM, -12.0, 12.0, 0.0));
  43. addOutput(Port::create<PJ301MPort>(Vec(33, 275), Port::OUTPUT, module, Tension::VOLT_OUTPUT));
  44. addChild(ModuleLightWidget::create<MediumLight<RedLight>>(Vec(41, 59), module, Tension::BLINK_LIGHT));
  45. }
  46. } // namespace rack_plugin_NauModular
  47. using namespace rack_plugin_NauModular;
  48. RACK_PLUGIN_MODEL_INIT(NauModular, Tension) {
  49. Model *modelTension = Model::create<Tension, TensionWidget>("NauModular", "Tension", "Tension", FUNCTION_GENERATOR_TAG);
  50. return modelTension;
  51. }