VulcanoLE/src/VulcanoLE/Scripts/TheUnknown.cpp

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