#ifndef UTILS_H #define UTILS_H float interpolate(float lag, float from, float to); typedef unsigned int IntColor; namespace Color { constexpr IntColor getColor(unsigned int r, unsigned int g, unsigned int b) { return ((r & 0xFF) << 0) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16) | 0xFF000000; } constexpr IntColor getDarkerColor(unsigned int r, unsigned int g, unsigned int b) { r *= 0.5; g *= 0.5; b *= 0.5; return ((r & 0xFF) << 0) | ((g & 0xFF) << 8) | ((b & 0xFF) << 16) | 0xFF000000; } constexpr int COLOR_AMOUNT = 16; constexpr IntColor COLORS[COLOR_AMOUNT] { getColor(0, 0, 0), getColor(0, 0, 170), getColor(0, 170, 0), getColor(0, 170, 170), getColor(170, 0, 0), getColor(170, 0, 170), getColor(255, 170, 0), getColor(170, 170, 170), getColor(85, 85, 85), getColor(85, 85, 255), getColor(85, 255, 85), getColor(85, 255, 255), getColor(255, 85, 85), getColor(255, 85, 255), getColor(255, 255, 85), getColor(255, 255, 255) }; constexpr IntColor DARK_COLORS[COLOR_AMOUNT] { getDarkerColor(0, 0, 0), getDarkerColor(0, 0, 170), getDarkerColor(0, 170, 0), getDarkerColor(0, 170, 170), getDarkerColor(170, 0, 0), getDarkerColor(170, 0, 170), getDarkerColor(255, 170, 0), getDarkerColor(170, 170, 170), getDarkerColor(85, 85, 85), getDarkerColor(85, 85, 255), getDarkerColor(85, 255, 85), getDarkerColor(85, 255, 255), getDarkerColor(255, 85, 85), getDarkerColor(255, 85, 255), getDarkerColor(255, 255, 85), getDarkerColor(255, 255, 255) }; } #endif