raylib-cpp
C++ object-oriented wrapper library for raylib.
Loading...
Searching...
No Matches
Vector3.hpp
1#ifndef RAYLIB_CPP_INCLUDE_VECTOR3_HPP_
2#define RAYLIB_CPP_INCLUDE_VECTOR3_HPP_
3
4#ifndef RAYLIB_CPP_NO_MATH
5#include <cmath>
6#endif
7
8#include <string>
9
10#include "./raylib-cpp-utils.hpp"
11#include "./raylib.hpp"
12#include "./raymath.hpp"
13#include "./raylib-cpp-utils.hpp"
14#include "./RadiansDegrees.hpp"
15
16namespace raylib {
20class Vector3 : public ::Vector3 {
21public:
22 Vector3(const ::Vector3& vec) : ::Vector3{vec.x, vec.y, vec.z} {}
23
24 Vector3(float x, float y, float z) : ::Vector3{x, y, z} {}
25 Vector3(float x, float y) : ::Vector3{x, y, 0} {}
26 Vector3(float x) : ::Vector3{x, 0, 0} {}
27 Vector3() : ::Vector3{0, 0, 0} {}
28
29 Vector3(::Color color) { set(ColorToHSV(color)); }
30
31 GETTERSETTER(float, X, x)
32 GETTERSETTER(float, Y, y)
33 GETTERSETTER(float, Z, z)
34
35 Vector3& operator=(const ::Vector3& vector3) {
36 set(vector3);
37 return *this;
38 }
39
40 bool operator==(const ::Vector3& other) const { return x == other.x && y == other.y && z == other.z; }
41
42 bool operator!=(const ::Vector3& other) const { return !(*this == other); }
43
44 [[nodiscard]] std::string ToString() const { return TextFormat("Vector3(%f, %f, %f)", x, y, z); }
45
46 operator std::string() const { return ToString(); }
47
48#ifndef RAYLIB_CPP_NO_MATH
52 [[nodiscard]] Vector3 Add(const ::Vector3& vector3) const { return Vector3Add(*this, vector3); }
53
57 Vector3 operator+(const ::Vector3& vector3) const { return Vector3Add(*this, vector3); }
58
59 Vector3& operator+=(const ::Vector3& vector3) {
60 set(Vector3Add(*this, vector3));
61
62 return *this;
63 }
64
68 [[nodiscard]] Vector3 Add(float value) const {
69 return Vector3AddValue(*this, value);
70 }
71
75 Vector3 operator+(float value) const {
76 return Vector3AddValue(*this, value);
77 }
78
79 Vector3& operator+=(float value) {
80 set(Vector3AddValue(*this, value));
81
82 return *this;
83 }
84
88 [[nodiscard]] Vector3 Subtract(const ::Vector3& vector3) const { return Vector3Subtract(*this, vector3); }
89
93 Vector3 operator-(const ::Vector3& vector3) const { return Vector3Subtract(*this, vector3); }
94
95 Vector3& operator-=(const ::Vector3& vector3) {
96 set(Vector3Subtract(*this, vector3));
97
98 return *this;
99 }
100
104 [[nodiscard]] Vector3 Subtract(float value) const {
105 return Vector3SubtractValue(*this, value);
106 }
107
111 Vector3 operator-(float value) const {
112 return Vector3SubtractValue(*this, value);
113 }
114
115 Vector3& operator-=(float value) {
116 set(Vector3SubtractValue(*this, value));
117
118 return *this;
119 }
120
124 [[nodiscard]] Vector3 Negate() const { return Vector3Negate(*this); }
125
129 Vector3 operator-() const { return Vector3Negate(*this); }
130
134 [[nodiscard]] Vector3 Multiply(const ::Vector3& vector3) const { return Vector3Multiply(*this, vector3); }
135
139 Vector3 operator*(const ::Vector3& vector3) const { return Vector3Multiply(*this, vector3); }
140
144 Vector3& operator*=(const ::Vector3& vector3) {
145 set(Vector3Multiply(*this, vector3));
146
147 return *this;
148 }
149
153 [[nodiscard]] Vector3 Scale(const float scaler) const { return Vector3Scale(*this, scaler); }
154
158 Vector3 operator*(const float scaler) const { return Vector3Scale(*this, scaler); }
159
163 Vector3& operator*=(const float scaler) {
164 set(Vector3Scale(*this, scaler));
165
166 return *this;
167 }
168
172 [[nodiscard]] Vector3 Divide(const ::Vector3& vector3) const { return Vector3Divide(*this, vector3); }
173
177 Vector3 operator/(const ::Vector3& vector3) const { return Vector3Divide(*this, vector3); }
178
182 Vector3& operator/=(const ::Vector3& vector3) {
183 x /= vector3.x;
184 y /= vector3.y;
185 z /= vector3.z;
186
187 return *this;
188 }
189
193 [[nodiscard]] Vector3 Divide(const float div) const { return ::Vector3{x / div, y / div, z / div}; }
194
198 Vector3 operator/(const float div) const { return Divide(div); }
199
203 Vector3& operator/=(const float div) {
204 x /= div;
205 y /= div;
206 z /= div;
207
208 return *this;
209 }
210
214 [[nodiscard]] float Length() const { return Vector3Length(*this); }
215
219 [[nodiscard]] float LengthSqr() const { return Vector3LengthSqr(*this); }
220
221 [[nodiscard]] Vector3 Normalize() const { return Vector3Normalize(*this); }
222
223 [[nodiscard]] float DotProduct(const ::Vector3& vector3) const { return Vector3DotProduct(*this, vector3); }
224
225 [[nodiscard]] float Distance(const ::Vector3& vector3) const { return Vector3Distance(*this, vector3); }
226
227 [[nodiscard]] Vector3 Lerp(const ::Vector3& vector3, const float amount) const { return Vector3Lerp(*this, vector3, amount); }
228
229 [[nodiscard]] Vector3 CrossProduct(const ::Vector3& vector3) const { return Vector3CrossProduct(*this, vector3); }
230
231 [[nodiscard]] Vector3 Perpendicular() const { return Vector3Perpendicular(*this); }
232
233 [[nodiscard]] Vector3 Project(const ::Vector3& vector3) const { return Vector3Project(*this, vector3); }
234
235 [[nodiscard]] Vector3 Reject(const ::Vector3& vector3) const { return Vector3Reject(*this, vector3); }
236
237 void OrthoNormalize(::Vector3* vector3) { Vector3OrthoNormalize(this, vector3); }
238
239 [[nodiscard]] Vector3 Transform(const ::Matrix& matrix) const { return Vector3Transform(*this, matrix); }
240
241 [[nodiscard]] Vector3 RotateByQuaternion(const ::Quaternion& quaternion) const {
242 return Vector3RotateByQuaternion(*this, quaternion);
243 }
244
245 [[nodiscard]] Vector3 Reflect(const ::Vector3& normal) const { return Vector3Reflect(*this, normal); }
246
247 [[nodiscard]] Vector3 Min(const ::Vector3& vector3) const { return Vector3Min(*this, vector3); }
248
249 [[nodiscard]] Vector3 Max(const ::Vector3& vector3) const { return Vector3Max(*this, vector3); }
250
251 [[nodiscard]] Vector3 Barycenter(const ::Vector3& a, const ::Vector3& b, const ::Vector3& c) const {
252 return Vector3Barycenter(*this, a, b, c);
253 }
254
255 static Vector3 Zero() { return Vector3Zero(); }
256
257 static Vector3 One() {
258 return Vector3One();
259 }
260
261 static inline Vector3 Left() {
262 return {1, 0, 0};
263 }
264
265 static inline Vector3 Right() {
266 return {-1, 0, 0};
267 }
268
269 static inline Vector3 Up() {
270 return {0, 1, 0};
271 }
272
273 static inline Vector3 Down() {
274 return {0, -1, 0};
275 }
276
277 static inline Vector3 Forward() {
278 return {0, 0, 1};
279 }
280
281 static inline Vector3 Back() {
282 return {0, 0, -1};
283 }
284#endif
285
286 void DrawLine3D(const ::Vector3& endPos, ::Color color) const { ::DrawLine3D(*this, endPos, color); }
287
288 void DrawPoint3D(::Color color) const { ::DrawPoint3D(*this, color); }
289
290 void DrawCircle3D(
291 float radius,
292 const ::Vector3& rotationAxis,
293 Radian rotationAngle,
294 Color color) const {
295 ::DrawCircle3D(*this, radius, rotationAxis, rotationAngle, color);
296 }
297
298 void DrawCube(float width, float height, float length, ::Color color) const {
299 ::DrawCube(*this, width, height, length, color);
300 }
301
302 void DrawCube(const ::Vector3& size, ::Color color) const { ::DrawCubeV(*this, size, color); }
303
304 void DrawCubeWires(float width, float height, float length, ::Color color) const {
305 ::DrawCubeWires(*this, width, height, length, color);
306 }
307
308 void DrawCubeWires(const ::Vector3& size, ::Color color) const { ::DrawCubeWiresV(*this, size, color); }
309
310 void DrawSphere(float radius, ::Color color) const { ::DrawSphere(*this, radius, color); }
311
312 void DrawSphere(float radius, int rings, int slices, ::Color color) const {
313 ::DrawSphereEx(*this, radius, rings, slices, color);
314 }
315
316 void DrawSphereWires(float radius, int rings, int slices, ::Color color) const {
317 ::DrawSphereWires(*this, radius, rings, slices, color);
318 }
319
320 void DrawCylinder(float radiusTop, float radiusBottom, float height, int slices, ::Color color) const {
321 ::DrawCylinder(*this, radiusTop, radiusBottom, height, slices, color);
322 }
323
324 void DrawCylinderWires(float radiusTop, float radiusBottom, float height, int slices, ::Color color) const {
325 ::DrawCylinderWires(*this, radiusTop, radiusBottom, height, slices, color);
326 }
327
328 void DrawPlane(const ::Vector2& size, ::Color color) const { ::DrawPlane(*this, size, color); }
329
333 [[nodiscard]] bool CheckCollision(float radius1, const ::Vector3& center2, float radius2) const {
334 return CheckCollisionSpheres(*this, radius1, center2, radius2);
335 }
336protected:
337 void set(const ::Vector3& vec) {
338 x = vec.x;
339 y = vec.y;
340 z = vec.z;
341 }
342};
343} // namespace raylib
344
346
347#endif // RAYLIB_CPP_INCLUDE_VECTOR3_HPP_
Vector3 type.
Definition: Vector3.hpp:20
Vector3 operator-(float value) const
Subtract vector by float value.
Definition: Vector3.hpp:111
Vector3 operator/(const ::Vector3 &vector3) const
Divide vector by vector.
Definition: Vector3.hpp:177
Vector3 Negate() const
Negate provided vector (invert direction)
Definition: Vector3.hpp:124
Vector3 operator-() const
Negate provided vector (invert direction)
Definition: Vector3.hpp:129
Vector3 & operator/=(const ::Vector3 &vector3)
Divide vector by vector.
Definition: Vector3.hpp:182
Vector3 operator*(const ::Vector3 &vector3) const
Multiply vector by vector.
Definition: Vector3.hpp:139
Vector3 & operator*=(const float scaler)
Multiply vector by scalar.
Definition: Vector3.hpp:163
Vector3 & operator*=(const ::Vector3 &vector3)
Multiply vector by vector.
Definition: Vector3.hpp:144
Vector3 operator/(const float div) const
Divide a vector by a value.
Definition: Vector3.hpp:198
float LengthSqr() const
Calculate vector square length.
Definition: Vector3.hpp:219
Vector3 operator+(const ::Vector3 &vector3) const
Add two vectors.
Definition: Vector3.hpp:57
Vector3 Add(float value) const
Add vector and float value.
Definition: Vector3.hpp:68
Vector3 Add(const ::Vector3 &vector3) const
Add two vectors.
Definition: Vector3.hpp:52
Vector3 Scale(const float scaler) const
Multiply vector by scalar.
Definition: Vector3.hpp:153
float Length() const
Calculate vector length.
Definition: Vector3.hpp:214
Vector3 Divide(const ::Vector3 &vector3) const
Divide vector by vector.
Definition: Vector3.hpp:172
Vector3 Divide(const float div) const
Divide a vector by a value.
Definition: Vector3.hpp:193
Vector3 Subtract(const ::Vector3 &vector3) const
Subtract two vectors.
Definition: Vector3.hpp:88
Vector3 operator+(float value) const
Add vector and float value.
Definition: Vector3.hpp:75
Vector3 & operator/=(const float div)
Divide a vector by a value.
Definition: Vector3.hpp:203
Vector3 Multiply(const ::Vector3 &vector3) const
Multiply vector by vector.
Definition: Vector3.hpp:134
Vector3 Subtract(float value) const
Subtract vector by float value.
Definition: Vector3.hpp:104
Vector3 operator-(const ::Vector3 &vector3) const
Subtract two vectors.
Definition: Vector3.hpp:93
bool CheckCollision(float radius1, const ::Vector3 &center2, float radius2) const
Detect collision between two spheres.
Definition: Vector3.hpp:333
Vector3 operator*(const float scaler) const
Multiply vector by scalar.
Definition: Vector3.hpp:158
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8