Skip to content

Commit

Permalink
Divider added
Browse files Browse the repository at this point in the history
  • Loading branch information
evgazloy committed Oct 8, 2021
1 parent be56c3b commit 2d47978
Showing 1 changed file with 48 additions and 33 deletions.
81 changes: 48 additions & 33 deletions src/OneKnob.cpp
@@ -1,5 +1,4 @@
#include "plugin.hpp"
#include <iostream>

struct OneKnob : Module
{
Expand Down Expand Up @@ -27,17 +26,20 @@ struct OneKnob : Module
};

const float c_threshold = 1.f / 128.f;
float m_knob {};
float m_value {};
ParamWidget *m_touchedParam {};
bool m_picked {};
bool m_isCV {};
float m_knob;
float m_value;
ParamWidget *m_touchedParam;
bool m_picked;
bool m_isCV;
dsp::ClockDivider m_divider {};

OneKnob()
{
config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS);
configParam(KNOB_PARAM, 0.f, 1.f, 0.f, "Map");
configParam(MODE_PARAM, 0.f, 1.f, 0.f, "Absolute mode");
configParam(MODE_PARAM, 0.f, 1.f, 0.f, "Absolute mode");
m_divider.setDivision(32);
this->onReset();
}

bool isPicked(float value)
Expand All @@ -50,46 +52,59 @@ struct OneKnob : Module
return m_picked;
};

void process(const ProcessArgs& args) override
void onReset() override
{
bool isCV = inputs[CV_INPUT].isConnected();
if(isCV != m_isCV)
{
m_isCV = isCV;
m_picked = false;
}
Module::onReset();
m_knob = 0.f;
m_value = 0.f;
m_touchedParam = NULL;
m_picked = false;
m_isCV = false;
}

float knob = isCV ? inputs[CV_INPUT].getVoltage() / 10.f :
params[KNOB_PARAM].getValue();
if(knob != m_knob)
void process(const ProcessArgs& args) override
{
if(m_divider.process())
{
m_knob = knob;
bool isCV = inputs[CV_INPUT].isConnected();
if(isCV != m_isCV)
{
m_isCV = isCV;
m_picked = false;
}

ParamWidget *touchedParam = APP->scene->rack->touchedParam;
if(touchedParam)
float knob = isCV ? clamp(inputs[CV_INPUT].getVoltage() / 10.f, 0.f, 1.f) :
params[KNOB_PARAM].getValue();
if(knob != m_knob)
{
ParamQuantity *quantity = touchedParam->paramQuantity;
if(quantity && quantity->isBounded())
m_knob = knob;

ParamWidget *touchedParam = APP->scene->rack->touchedParam;
if(touchedParam)
{
bool absMode = params[MODE_PARAM].getValue() > 0.f;
if(!absMode && (touchedParam != m_touchedParam))
ParamQuantity *quantity = touchedParam->paramQuantity;
if(quantity && quantity->isBounded())
{
m_touchedParam = touchedParam;
m_picked = false;
}
bool absMode = params[MODE_PARAM].getValue() > 0.f;
if(!absMode && (touchedParam != m_touchedParam))
{
m_touchedParam = touchedParam;
m_picked = false;
}

if(quantity->module != this)
{
if(absMode || this->isPicked(quantity->getScaledValue()))
if(quantity->module != this)
{
quantity->setScaledValue(knob);
m_value = quantity->getScaledValue();
if(absMode || this->isPicked(quantity->getScaledValue()))
{
quantity->setScaledValue(knob);
m_value = quantity->getScaledValue();
}
}
}
}
}
}
}
}
};


Expand Down

0 comments on commit 2d47978

Please sign in to comment.