sandbox
Loading...
Searching...
No Matches
color.hpp
1#ifndef LIBSBX_MATH_COLOR_HPP_
2#define LIBSBX_MATH_COLOR_HPP_
3
4#include <cmath>
5
6#include <yaml-cpp/yaml.h>
7
9
10// #include <libsbx/math/vector4.hpp>
11
12namespace sbx::math {
13
14class color {
15
16public:
17
18 color(std::uint32_t rgba) noexcept;
19
20 color(std::float_t red, std::float_t green, std::float_t blue, std::float_t alpha = 1.0f) noexcept;
21
22 static auto black() noexcept -> color {
23 return color{0.0f, 0.0f, 0.0f, 1.0f};
24 }
25
26 static auto white() noexcept -> color {
27 return color{1.0f, 1.0f, 1.0f, 1.0f};
28 }
29
30 static auto red() noexcept -> color {
31 return color{1.0f, 0.0f, 0.0f, 1.0f};
32 }
33
34 static auto green() noexcept -> color {
35 return color{0.0f, 1.0f, 0.0f, 1.0f};
36 }
37
38 static auto blue() noexcept -> color {
39 return color{0.0f, 0.0f, 1.0f, 1.0f};
40 }
41
42 static auto magenta() noexcept -> color {
43 return color{1.0f, 0.0f, 1.0f, 1.0f};
44 }
45
46 static auto yellow() noexcept -> color {
47 return color{1.0f, 1.0f, 0.0f, 1.0f};
48 }
49
50 static auto cyan() noexcept -> color {
51 return color{0.0f, 1.0f, 1.0f, 1.0f};
52 }
53
54 auto r() const noexcept -> const std::float_t&;
55
56 auto r() noexcept -> std::float_t&;
57
58 auto g() const noexcept -> const std::float_t&;
59
60 auto g() noexcept -> std::float_t&;
61
62 auto b() const noexcept -> const std::float_t&;
63
64 auto b() noexcept -> std::float_t&;
65
66 auto a() const noexcept -> const std::float_t&;
67
68 auto a() noexcept -> std::float_t&;
69
70private:
71
72 std::float_t _red;
73 std::float_t _green;
74 std::float_t _blue;
75 std::float_t _alpha;
76
77}; // class color
78
79auto operator==(const color& lhs, const color& rhs) noexcept -> bool;
80
81auto operator*(color lhs, const std::float_t value) -> color;
82
83} // namespace sbx::math
84
85template<>
86struct YAML::convert<sbx::math::color> {
87 static auto encode(const sbx::math::color& color) -> Node;
88 static auto decode(const Node& node, sbx::math::color& color) -> bool;
89}; // struct YAML::convert
90
91template<>
92struct std::hash<sbx::math::color> {
93 auto operator()(const sbx::math::color& color) const noexcept -> std::size_t;
94}; // struct std::hash
95
96#endif // LIBSBX_MATH_COLOR_HPP_
Definition: tests.cpp:5
Definition: color.hpp:14