VulcanoLE/src/VulcanoLE/Visual/VisPlugins.cpp

66 lines
2.0 KiB
C++

#include <VulcanoLE/Visual/VisPlugins.h>
#include <VulcanoLE/Scripts/Spectrum.h>
#include <VulcanoLE/Scripts/Loudness.h>
#include <VulcanoLE/Scripts/PoliceLike.h>
#include <VUtils/Logging.h>
#include <VulcanoLE/Scripts/RainbowLine.h>
namespace VIZ {
void VisPlugins::init(HIDHelper *hidHelper, AudioGrabber *audioGrabber) {
grabber = audioGrabber;
keyboard = new Vulcan121(hidHelper);
viz[0] = new Spectrum(grabber, keyboard);
viz[1] = new Loudness(grabber, keyboard);
viz[2] = new PoliceLike(grabber, keyboard);
viz[3] = new RainbowLine(grabber, keyboard);
currentVis = viz[mode];
}
void VisPlugins::onStartup() {
if (!keyboard->sendInitSequence()) {
ERR("FAILED TO INIT KEYBOARD")
exit(1);
}
currentVis->onSetup();
start = std::chrono::high_resolution_clock::now();
}
void VisPlugins::onTick() {
auto stop = std::chrono::high_resolution_clock::now();
auto delta = std::chrono::duration_cast<micro>(stop - start).count();
currentVis->onTick(delta);
usleep(1000);
start = stop;
}
void VisPlugins::onShutdown() {
int16_t r = env->getAsInt("shutdown_color_red", 0);
int16_t g = env->getAsInt("shutdown_color_green", 0);
int16_t b = env->getAsInt("shutdown_color_blue", 150);
int16_t a = env->getAsInt("shutdown_brightness", 100);
keyboard->sendToLEDs({ r, g, b, a });
}
VisPlugins::~VisPlugins() {
delete grabber;
delete keyboard;
for (auto &i : viz) {
delete i;
}
}
void VisPlugins::setCurrentMode(int m) {
if (m < 1 || m > VIZSIZE) {
ERR("Mode Setting Failed >> Mode is not in the available range 1 - %d", VIZSIZE)
return;
}
grabber->env->setNumber("visual_mode", m);
m -= 1;
currentVis = viz[m];
LOG("Now Using: %s", currentVis->name());
currentVis->onSetup();
mode = m;
}
}