Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
angle.h
1#ifndef OE_UTIL_ANGLE_H
2#define OE_UTIL_ANGLE_H
3
4#include <glm/trigonometric.hpp>
5
6namespace oe::lit
7{
18 struct Angle
19 {
23 constexpr Angle() noexcept = default;
24
29 constexpr explicit Angle(const float angle) noexcept
30 :radians(angle)
31 {}
32
39 constexpr static Angle fromDegrees(const float angle) noexcept
40 {
41 Angle result;
42
43 result.radians = glm::radians(angle);
44
45 return result;
46 }
47
54 constexpr static Angle fromRadians(const float angle) noexcept
55 {
56 Angle result;
57
58 result.radians = angle;
59
60 return result;
61 }
62
68 constexpr void setDegrees(const float angle) noexcept
69 {
70 radians = glm::radians(angle);
71 }
72
80 constexpr inline void setRadians(const float angle) noexcept
81 {
82 radians = angle;
83 }
84
90 constexpr float getDegrees() const noexcept
91 {
92 return glm::degrees(radians);
93 }
94
102 constexpr inline float getRadians() const noexcept
103 {
104 return radians;
105 }
106
111 constexpr Angle operator-() const noexcept
112 {
113 Angle result;
114 result.radians = -radians;
115 return result;
116 }
117
121 float radians = 0.f;
122 };
123}
124
131constexpr oe::lit::Angle operator+(const oe::lit::Angle& op1, const oe::lit::Angle& op2) noexcept
132{
133 oe::lit::Angle result;
134
135 result.radians = op1.radians + op2.radians;
136
137 return result;
138}
139
143constexpr oe::lit::Angle operator""_deg(const long double input) noexcept
144{
145 return oe::lit::Angle::fromDegrees((float)input);
146}
147
151constexpr oe::lit::Angle operator""_deg(const unsigned long long input) noexcept
152{
153 return oe::lit::Angle::fromDegrees((float)input);
154}
155
159constexpr oe::lit::Angle operator""_rad(const long double input) noexcept
160{
161 return oe::lit::Angle::fromRadians((float)input);
162}
163
164#endif
Wrapper and helper to abstract conversions between degree and radian angles.
Definition angle.h:19
float radians
Angle value in radians.
Definition angle.h:121
constexpr void setRadians(const float angle) noexcept
Set angle value in radians.
Definition angle.h:80
constexpr void setDegrees(const float angle) noexcept
Set angle value in degrees.
Definition angle.h:68
constexpr Angle operator-() const noexcept
Apply negation on an angle.
Definition angle.h:111
static constexpr Angle fromRadians(const float angle) noexcept
Create an angle from a value in radians.
Definition angle.h:54
constexpr float getDegrees() const noexcept
Get angle value in degrees.
Definition angle.h:90
constexpr float getRadians() const noexcept
Get angle value in radians.
Definition angle.h:102
static constexpr Angle fromDegrees(const float angle) noexcept
Create an angle from a value in degrees.
Definition angle.h:39
constexpr Angle() noexcept=default
Default constructor to create a "0" angle.