#pragma once namespace kek { struct Color { float r, g, b, a; constexpr Color(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {} constexpr Color(float r, float g, float b) : Color(r, g, b, 1.0) {} constexpr Color() : Color(0, 0, 0, 1) {} float *valuePointer() { return &r; } constexpr Color darker(float factor = 0.7) const { return Color(r * factor, g * factor, b * factor, a); } constexpr Color brighter(float factor = 0.7) const { return Color(r / factor, g / factor, b / factor, a); } }; class Colors { public: static constexpr Color RED = Color(1.0, 0.0, 0.0); static constexpr Color ORANGE = Color(1.0, 0.5, 0.0); static constexpr Color YELLOW = Color(1.0, 1.0, 0.0); static constexpr Color GREEN = Color(0.0, 1.0, 0.0); static constexpr Color CYAN = Color(0.0, 1.0, 1.0); static constexpr Color BLUE = Color(0.0, 0.0, 1.0); static constexpr Color PURPLE = Color(0.5, 0.0, 0.5); static constexpr Color MAGENTA = Color(1.0, 0.0, 1.0); static constexpr Color GRAY = Color(0.5, 0.5, 0.5); static constexpr Color WHITE = Color(1.0, 1.0, 1.0); static constexpr Color BLACK = Color(0.0, 0.0, 0.0); static constexpr Color TRANSPARENT = Color(0.0, 0.0, 0.0, 0.0); Colors() = delete; }; }