-
Notifications
You must be signed in to change notification settings - Fork 4
/
Chaser.cpp
54 lines (47 loc) · 1.39 KB
/
Chaser.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "Chaser.h"
Chaser::Chaser(Strip *strip, AudioChannel *audioChannel, State *state) : Fx(strip, audioChannel, state) {
audioTrigger = new AudioTrigger(audioChannel);
for (uint8_t i = 0; i < ITEMS; i++) {
items[i].setup(strip);
}
}
Chaser::~Chaser() {
delete audioTrigger;
}
void Chaser::reset() {
clear();
for (int i = 0; i < ITEMS; i++) {
uint8_t size = random8(2, 5);
items[i].reset()
.setColor(ColorFromPalette(PALETTE, random8()))
.setElasticConstant(4)
.setCriticalDamping()
.setFixedPointPosition(strip->random())
.setVelocity(10)
.setRange(-size, size)
.setMirror(false)
.setShowWhenStable(true);
}
moveTimer.reset();
fadeTimer.reset();
audioTrigger->reset();
}
void Chaser::loop() {
if (fadeTimer.isElapsed()) {
strip->fade(FADE_RATE);
}
if (audioTrigger->triggered(1)) {
if (moveTimer.isElapsed()) {
items[0].setFixedPointPosition(strip->randomExclude(items[0].getPosition(), 5));
}
}
for (int i = 1; i < ITEMS; i++) {
items[i].setFixedPointPosition(items[i - 1].getPosition());
}
for (int i = 0; i < ITEMS; i++) {
items[i]
.setElasticConstant(5 + 100 * state->parabolicFxSpeed)
.setCriticalDamping()
.loop();
}
}