41 lines
1.6 KiB
C++
41 lines
1.6 KiB
C++
#include <VulcanoLE/Scripts/TheUknown.h>
|
|
#include <VUtils/SimplexNoise.h>
|
|
|
|
namespace VIZ {
|
|
TheUnknown::TheUnknown(AudioGrabber *pGrabber, Vulcan121 *vulcan) : VIZ(pGrabber, vulcan) {
|
|
m_random.setDist(0, 128);
|
|
for (int i = 0; i < NUM_KEYS; i++) {
|
|
m_keyHeightMap[i] = std::abs(SimplexNoise::noise(i + 1.0f)) * 0.1;
|
|
m_keyOffset[i] = m_random.getFast();
|
|
}
|
|
m_random.setDist(0.005, 0.01);
|
|
}
|
|
void TheUnknown::onSetup() {
|
|
keyboard->sendToLEDs({ 0, 0, 0, 0 });
|
|
Vulcan121::setColor(map, { 202, 35, 13, 255 });
|
|
grabber->requestMode = AudioGrabber::ReqMode::PEAK;
|
|
}
|
|
void TheUnknown::onTick(float delta) {
|
|
auto loudness = grabber->getLoudness();
|
|
auto factor = (((loudness.r + loudness.l) / 2.0) * 0.9) + 0.05;
|
|
for (size_t i = 0; i < keyboardData.num_keys; i++) {
|
|
auto &color = map.key[i];
|
|
auto noise = SimplexNoise::noise(m_keyOffset[i]) * factor;
|
|
noise = std::abs(noise) + 0.02;
|
|
auto newAlpha = std::clamp((noise + m_keyHeightMap[i]) * 255, 0.0, 255.0);
|
|
color.a = (color.a + newAlpha) / 2;
|
|
|
|
auto offset = std::sin(m_angle) * m_random.getFast();
|
|
m_keyOffset[i] += (delta * (1.5 * factor)) + offset;
|
|
m_angle += 0.0005;
|
|
if (m_keyOffset[i] > 20000000)
|
|
m_keyOffset[i] = 0.0;
|
|
if (m_angle > 1.0)
|
|
m_angle -= 1;
|
|
}
|
|
keyboard->sendLedMap(map);
|
|
}
|
|
const char *TheUnknown::name() {
|
|
return "TheUnknown";
|
|
}
|
|
} |