vktutorial/rainbow_system.hpp

44 lines
1.1 KiB
C++

#pragma once
#include <hk_game_object.hpp>
// std
#include <memory>
#include <random>
#include <vector>
namespace hk
{
class RainbowSystem
{
public:
RainbowSystem(float flickerRate) : m_flickerRate(flickerRate)
{
// initialize colors
m_color = {{.8f, .1f, .1f}, {.1f, .8f, .1f}, {.1f, .1f, .8f}, {.8f, .8f, .1f}, {.8f, .1f, .8f}, {.1f, .8f, .8f}};
m_elapsedTime = m_flickerRate;
}
void update(float dt, std::vector<GameObject> &gameObjects)
{
m_elapsedTime -= dt;
if (m_elapsedTime < 0.f)
{
std::uniform_int_distribution<int> randInt{0, static_cast<int>(m_color.size()) -1};
for (auto &obj : gameObjects)
{
int randValue = randInt(m_rng);
obj.m_color = m_color[randValue];
}
}
}
private:
std::random_device m_rd;
std::mt19937 m_rng{m_rd()};
std::vector<glm::vec3> m_color;
float m_flickerRate;
float m_elapsedTime;
};
}