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:
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;
};