BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit 62f19342446f96ccde0b73f8a51bdffdd04b1db9
parent b3ed25f77445eba65ee5f0c3dde2b620215f44d3
Author: Matt Demanett <matt@demanett.net>
Date:   Tue,  7 May 2019 23:23:33 -0400

Walk2: click on display jumps to that point.

Diffstat:
Msrc/Walk2.cpp | 25+++++++++++++++++++++++--
Msrc/Walk2.hpp | 4++++
Msrc/dsp/noise.cpp | 7++++++-
Msrc/dsp/noise.hpp | 1+
4 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/Walk2.cpp b/src/Walk2.cpp @@ -58,7 +58,14 @@ void Walk2::step() { } } - if (_jumpTrigger.process(inputs[JUMP_INPUT].value)) { + Vec* jumpTo = _jumpTo; + if (jumpTo != NULL) { + _jumpTo = NULL; + _walkX.tell(jumpTo->x); + _walkY.tell(jumpTo->y); + delete jumpTo; + } + else if (_jumpTrigger.process(inputs[JUMP_INPUT].value)) { _walkX.jump(); _walkY.jump(); } @@ -109,6 +116,21 @@ struct Walk2Display : TransparentWidget { { } + void onMouseDown(EventMouseDown& e) override { + if ( + e.pos.x > _insetAround && + e.pos.x < _size.x - _insetAround && + e.pos.y > _insetAround && + e.pos.y < _size.y - _insetAround + ) { + float x = 20.0f * ((e.pos.x - _insetAround) / (float)_drawSize.x); + x -= 5.0f; + float y = 20.0f * ((e.pos.y - _insetAround) / (float)_drawSize.y); + y = 5.0f - y; + _module->_jumpTo = new Vec(x, y); + } + } + void draw(NVGcontext* vg) override { drawBackground(vg); float strokeWidth = std::max(1.0f, 3 - gRackScene->zoomWidget->zoom); @@ -264,7 +286,6 @@ struct Walk2Display : TransparentWidget { nvgStroke(vg); } - nvgRestore(vg); } diff --git a/src/Walk2.hpp b/src/Walk2.hpp @@ -1,5 +1,7 @@ #pragma once +#include <atomic> + #include "bogaudio.hpp" #include "dsp/buffer.hpp" #include "dsp/noise.hpp" @@ -58,11 +60,13 @@ struct Walk2 : Module { SlewLimiter _slewX, _slewY; Trigger _jumpTrigger; HistoryBuffer<float> _outsX, _outsY; + std::atomic<Vec*> _jumpTo; Walk2() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) , _outsX(historyPoints, 0.0f) , _outsY(historyPoints, 0.0f) + , _jumpTo(NULL) { onReset(); onSampleRateChange(); diff --git a/src/dsp/noise.cpp b/src/dsp/noise.cpp @@ -40,7 +40,12 @@ void RandomWalk::setParams(float sampleRate, float change) { } void RandomWalk::jump() { - _last = _bias = _noise.next() * 5.0f; + tell(_noise.next() * 5.0f); +} + +void RandomWalk::tell(float v) { + assert(v >= -5.0f && v <= 5.0f); + _last = _bias = v; _filter.reset(); } diff --git a/src/dsp/noise.hpp b/src/dsp/noise.hpp @@ -111,6 +111,7 @@ struct RandomWalk : Generator { void setParams(float sampleRate = 1000.0f, float change = 0.5f); void jump(); + void tell(float v); float _next() override; };