#pragma once #include // std #include #include #include 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 &gameObjects) { m_elapsedTime -= dt; if (m_elapsedTime < 0.f) { std::uniform_int_distribution randInt{0, static_cast(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 m_color; float m_flickerRate; float m_elapsedTime; }; }