44 lines
1.1 KiB
C++
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;
|
|
};
|
|
} |