galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
Colour.hpp
Go to the documentation of this file.
1
7
8#ifndef GALAXY_GRAPHICS_COLOUR_HPP_
9#define GALAXY_GRAPHICS_COLOUR_HPP_
10
11#include <array>
12#include <compare>
13
14#include <glm/vec4.hpp>
15
16#undef OPAQUE
17#undef TRANSPARENT
18
19namespace galaxy
20{
21 namespace graphics
22 {
26 class Colour final
27 {
28 public:
32 inline static const constexpr std::uint8_t OPAQUE = 255;
33
37 inline static const constexpr std::uint8_t TRANSPARENT = 0;
38
39 public:
43 Colour();
44
48 Colour(Colour&&);
49
53 Colour(const Colour&);
54
59
63 Colour& operator=(const Colour&);
64
68 ~Colour();
69
75 void set_r(const std::uint8_t r);
76
82 void set_g(const std::uint8_t g);
83
89 void set_b(const std::uint8_t b);
90
96 void set_a(const std::uint8_t a);
97
105 template<typename R>
106 requires std::is_same_v<std::uint8_t, R> || std::is_same_v<float, R>
107 R r() const;
108
116 template<typename G>
117 requires std::is_same_v<std::uint8_t, G> || std::is_same_v<float, G>
118 G g() const;
119
127 template<typename B>
128 requires std::is_same_v<std::uint8_t, B> || std::is_same_v<float, B>
129 B b() const;
130
138 template<typename A>
139 requires std::is_same_v<std::uint8_t, A> || std::is_same_v<float, A>
140 A a() const;
141
147 void set_rgba(const glm::vec4& rgba);
148
154 [[nodiscard]]
155 std::array<std::uint8_t, 4>& array();
156
162 [[nodiscard]]
163 glm::vec4& vec4();
164
170 [[nodiscard]]
171 const std::array<std::uint8_t, 4>& array() const;
172
178 [[nodiscard]]
179 const glm::vec4& vec4() const;
180
184 [[nodiscard]]
185 auto operator<=>(const Colour&) const = default;
186
187 private:
191 std::array<std::uint8_t, 4> m_array;
192
196 glm::vec4 m_vec4;
197 };
198
199 template<>
200 inline float Colour::r() const
201 {
202 return m_vec4.x;
203 }
204
205 template<>
206 inline std::uint8_t Colour::r() const
207 {
208 return m_array[0];
209 }
210
211 template<>
212 inline float Colour::g() const
213 {
214 return m_vec4.y;
215 }
216
217 template<>
218 inline std::uint8_t Colour::g() const
219 {
220 return m_array[1];
221 }
222
223 template<>
224 inline float Colour::b() const
225 {
226 return m_vec4.z;
227 }
228
229 template<>
230 inline std::uint8_t Colour::b() const
231 {
232 return m_array[2];
233 }
234
235 template<>
236 inline float Colour::a() const
237 {
238 return m_vec4.w;
239 }
240
241 template<>
242 inline std::uint8_t Colour::a() const
243 {
244 return m_array[3];
245 }
246 } // namespace graphics
247} // namespace galaxy
248
249#endif
Represents an RGBA colour.
Definition Colour.hpp:27
auto operator<=>(const Colour &) const =default
Comparison operator.
void set_g(const std::uint8_t g)
Green.
Definition Colour.cpp:86
glm::vec4 m_vec4
r,g,b,a = x,y,z,w.
Definition Colour.hpp:196
~Colour()
Destructor.
Definition Colour.cpp:64
std::array< std::uint8_t, 4 > & array()
Get integer array.
Definition Colour.cpp:155
R r() const
Get red.
B b() const
Get blue.
static const constexpr std::uint8_t OPAQUE
Opaque colour.
Definition Colour.hpp:32
Colour & operator=(Colour &&)
Move assignment operator.
Definition Colour.cpp:42
glm::vec4 & vec4()
Get vec4.
Definition Colour.cpp:160
std::array< std::uint8_t, 4 > m_array
r,g,b,a = 0,1,2,3.
Definition Colour.hpp:191
void set_r(const std::uint8_t r)
Red.
Definition Colour.cpp:68
Colour()
Constructor.
Definition Colour.cpp:24
void set_rgba(const glm::vec4 &rgba)
Set RGBA.
Definition Colour.cpp:140
G g() const
Get green.
void set_b(const std::uint8_t b)
Blue.
Definition Colour.cpp:104
void set_a(const std::uint8_t a)
Alpha.
Definition Colour.cpp:122
A a() const
Get alpha.
static const constexpr std::uint8_t TRANSPARENT
Transparent colour.
Definition Colour.hpp:37
Animated.cpp galaxy.
Definition Animated.cpp:16