raylib-cpp
C++ object-oriented wrapper library for raylib.
Loading...
Searching...
No Matches
Vector2.hpp
1#ifndef RAYLIB_CPP_INCLUDE_VECTOR2_HPP_
2#define RAYLIB_CPP_INCLUDE_VECTOR2_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 Vector2 : public ::Vector2 {
21public:
22 Vector2(const ::Vector2& vec) : ::Vector2{vec.x, vec.y} {}
23
24 Vector2(float x, float y) : ::Vector2{x, y} {}
25 Vector2(float x) : ::Vector2{x, 0} {}
26 Vector2() : ::Vector2{0, 0} {}
27
28 GETTERSETTER(float, X, x)
29 GETTERSETTER(float, Y, y)
30
34 Vector2& operator=(const ::Vector2& vector2) {
35 set(vector2);
36 return *this;
37 }
38
42 bool operator==(const ::Vector2& other) const { return x == other.x && y == other.y; }
43
47 bool operator!=(const ::Vector2& other) const { return !(*this == other); }
48
49 [[nodiscard]] std::string ToString() const { return TextFormat("Vector2(%f, %f)", x, y); }
50
51 operator std::string() const { return ToString(); }
52
53#ifndef RAYLIB_CPP_NO_MATH
57 Vector2 Add(const ::Vector2& vector2) const { return Vector2Add(*this, vector2); }
58
62 Vector2 operator+(const ::Vector2& vector2) const { return Vector2Add(*this, vector2); }
63
67 Vector2& operator+=(const ::Vector2& vector2) {
68 set(Vector2Add(*this, vector2));
69
70 return *this;
71 }
72
76 Vector2 Add(float value) const {
77 return Vector2AddValue(*this, value);
78 }
79
83 Vector2 operator+(float value) const {
84 return Vector2AddValue(*this, value);
85 }
86
90 Vector2& operator+=(float value) {
91 set(Vector2AddValue(*this, value));
92
93 return *this;
94 }
95
99 [[nodiscard]] Vector2 Subtract(const ::Vector2& vector2) const { return Vector2Subtract(*this, vector2); }
100
104 Vector2 operator-(const ::Vector2& vector2) const { return Vector2Subtract(*this, vector2); }
105
109 Vector2& operator-=(const ::Vector2& vector2) {
110 set(Vector2Subtract(*this, vector2));
111
112 return *this;
113 }
114
118 [[nodiscard]] Vector2 Subtract(float value) const {
119 return Vector2SubtractValue(*this, value);
120 }
121
125 Vector2 operator-(float value) const {
126 return Vector2SubtractValue(*this, value);
127 }
128
132 Vector2& operator-=(float value) {
133 set(Vector2SubtractValue(*this, value));
134
135 return *this;
136 }
137
141 [[nodiscard]] Vector2 Negate() const { return Vector2Negate(*this); }
142
146 Vector2 operator-() const { return Vector2Negate(*this); }
147
151 [[nodiscard]] Vector2 Multiply(const ::Vector2& vector2) const { return Vector2Multiply(*this, vector2); }
152
156 Vector2 operator*(const ::Vector2& vector2) const { return Vector2Multiply(*this, vector2); }
157
161 Vector2& operator*=(const ::Vector2& vector2) {
162 set(Vector2Multiply(*this, vector2));
163
164 return *this;
165 }
166
170 [[nodiscard]] Vector2 Scale(const float scale) const { return Vector2Scale(*this, scale); }
171
175 Vector2 operator*(const float scale) const { return Vector2Scale(*this, scale); }
176
180 Vector2& operator*=(const float scale) {
181 set(Vector2Scale(*this, scale));
182
183 return *this;
184 }
185
189 [[nodiscard]] Vector2 Divide(const ::Vector2& vector2) const { return Vector2Divide(*this, vector2); }
190
191
195 Vector2 operator/(const ::Vector2& vector2) const { return Vector2Divide(*this, vector2); }
196
200 Vector2& operator/=(const ::Vector2& vector2) {
201 set(Vector2Divide(*this, vector2));
202
203 return *this;
204 }
205
209 [[nodiscard]] Vector2 Divide(const float div) const { return ::Vector2{x / div, y / div}; }
210
214 Vector2 operator/(const float div) const { return Divide(div); }
215
219 Vector2& operator/=(const float div) {
220 this->x /= div;
221 this->y /= div;
222
223 return *this;
224 }
225
229 [[nodiscard]] Vector2 Normalize() const { return Vector2Normalize(*this); }
230
234 [[nodiscard]] Vector2 Transform(::Matrix mat) const { return ::Vector2Transform(*this, mat); }
235
239 [[nodiscard]] Vector2 Lerp(const ::Vector2& vector2, float amount) const { return Vector2Lerp(*this, vector2, amount); }
240
244 [[nodiscard]] Vector2 Reflect(const ::Vector2& normal) const { return Vector2Reflect(*this, normal); }
245
249 Vector2 Rotate(Radian angle) const {
250 return Vector2Rotate(*this, angle);
251 }
252
256 [[nodiscard]] Vector2 MoveTowards(const ::Vector2& target, float maxDistance) const {
257 return Vector2MoveTowards(*this, target, maxDistance);
258 }
259
263 [[nodiscard]] Vector2 Invert() const { return ::Vector2Invert(*this); }
264
268 [[nodiscard]] Vector2 Clamp(::Vector2 min, ::Vector2 max) const { return ::Vector2Clamp(*this, min, max); }
269
273 [[nodiscard]] Vector2 Clamp(float min, float max) const { return ::Vector2ClampValue(*this, min, max); }
274
278 [[nodiscard]] int Equals(::Vector2 q) const { return ::Vector2Equals(*this, q); }
279
283 [[nodiscard]] float Length() const { return Vector2Length(*this); }
284
288 [[nodiscard]] float LengthSqr() const { return Vector2LengthSqr(*this); }
289
293 [[nodiscard]] float DotProduct(const ::Vector2& vector2) const { return Vector2DotProduct(*this, vector2); }
294
298 [[nodiscard]] float Distance(const ::Vector2& vector2) const { return Vector2Distance(*this, vector2); }
299
303 [[nodiscard]] float DistanceSqr(::Vector2 v2) const { return ::Vector2DistanceSqr(*this, v2); }
304
308 Radian Angle(const ::Vector2& vector2) const {
309 return Vector2Angle(*this, vector2);
310 }
311
315 static Vector2 Zero() { return Vector2Zero(); }
316
320 static Vector2 One() { return Vector2One(); }
321#endif
322
323 void DrawPixel(::Color color = {0, 0, 0, 255}) const { ::DrawPixelV(*this, color); }
324
325 void DrawLine(::Vector2 endPos, ::Color color = {0, 0, 0, 255}) const { ::DrawLineV(*this, endPos, color); }
326
327 void DrawLine(::Vector2 endPos, float thick, ::Color color = {0, 0, 0, 255}) const {
328 ::DrawLineEx(*this, endPos, thick, color);
329 }
330
331 void DrawLineBezier(::Vector2 endPos, float thick, ::Color color = {0, 0, 0, 255}) const {
332 ::DrawLineBezier(*this, endPos, thick, color);
333 }
334
338 void DrawCircle(float radius, ::Color color = {0, 0, 0, 255}) const { ::DrawCircleV(*this, radius, color); }
339
340 void DrawRectangle(::Vector2 size, ::Color color = {0, 0, 0, 255}) const { ::DrawRectangleV(*this, size, color); }
341
342 void DrawPoly(int sides, float radius, Degree rotation, ::Color color = {0, 0, 0, 255}) const {
343 ::DrawPoly(*this, sides, radius, rotation, color);
344 }
345
349 [[nodiscard]] bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const {
350 return ::CheckCollisionCircles(*this, radius1, center2, radius2);
351 }
352
356 [[nodiscard]] bool CheckCollisionCircle(float radius, ::Rectangle rec) const {
357 return ::CheckCollisionCircleRec(*this, radius, rec);
358 }
359
363 [[nodiscard]] bool CheckCollision(::Rectangle rec) const { return ::CheckCollisionPointRec(*this, rec); }
364
368 [[nodiscard]] bool CheckCollision(::Vector2 center, float radius) const {
369 return ::CheckCollisionPointCircle(*this, center, radius);
370 }
371
375 [[nodiscard]] bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const {
376 return ::CheckCollisionPointTriangle(*this, p1, p2, p3);
377 }
378
382 bool
383 CheckCollisionLines(::Vector2 endPos1, ::Vector2 startPos2, ::Vector2 endPos2, ::Vector2* collisionPoint) const {
384 return ::CheckCollisionLines(*this, endPos1, startPos2, endPos2, collisionPoint);
385 }
386
390 [[nodiscard]] bool CheckCollisionPointLine(::Vector2 p1, ::Vector2 p2, int threshold = 1) const {
391 return ::CheckCollisionPointLine(*this, p1, p2, threshold);
392 }
393protected:
394 void set(const ::Vector2& vec) {
395 x = vec.x;
396 y = vec.y;
397 }
398};
399
400} // namespace raylib
401
403
404#endif // RAYLIB_CPP_INCLUDE_VECTOR2_HPP_
Radian type (allows automatic worry free conversion between radians and degrees)
Vector2 type.
Definition: Vector2.hpp:20
bool operator==(const ::Vector2 &other) const
Determine whether or not the vectors are equal.
Definition: Vector2.hpp:42
Vector2 & operator+=(float value)
Add vector and float value.
Definition: Vector2.hpp:90
Vector2 & operator-=(const ::Vector2 &vector2)
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:109
bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const
Check if point is inside a triangle.
Definition: Vector2.hpp:375
Vector2 operator-(float value) const
Subtract vector by float value.
Definition: Vector2.hpp:125
Vector2 MoveTowards(const ::Vector2 &target, float maxDistance) const
Move Vector towards target.
Definition: Vector2.hpp:256
Radian Angle(const ::Vector2 &vector2) const
Calculate angle from two vectors in X-axis.
Definition: Vector2.hpp:308
Vector2 Subtract(const ::Vector2 &vector2) const
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:99
Vector2 Clamp(::Vector2 min, ::Vector2 max) const
Clamp the components of the vector between.
Definition: Vector2.hpp:268
Vector2 operator*(const float scale) const
Scale vector (multiply by value)
Definition: Vector2.hpp:175
bool CheckCollision(::Rectangle rec) const
Check if point is inside rectangle.
Definition: Vector2.hpp:363
bool operator!=(const ::Vector2 &other) const
Determines if the vectors are not equal.
Definition: Vector2.hpp:47
Vector2 Lerp(const ::Vector2 &vector2, float amount) const
Calculate linear interpolation between two vectors.
Definition: Vector2.hpp:239
Vector2 & operator*=(const float scale)
Scale vector (multiply by value)
Definition: Vector2.hpp:180
Vector2 & operator/=(const ::Vector2 &vector2)
Divide vector by vector.
Definition: Vector2.hpp:200
float Length() const
Calculate vector length.
Definition: Vector2.hpp:283
float DotProduct(const ::Vector2 &vector2) const
Calculate two vectors dot product.
Definition: Vector2.hpp:293
float LengthSqr() const
Calculate vector square length.
Definition: Vector2.hpp:288
float DistanceSqr(::Vector2 v2) const
Calculate square distance between two vectors.
Definition: Vector2.hpp:303
float Distance(const ::Vector2 &vector2) const
Calculate distance between two vectors.
Definition: Vector2.hpp:298
Vector2 & operator+=(const ::Vector2 &vector2)
Add two vectors (v1 + v2)
Definition: Vector2.hpp:67
Vector2 Clamp(float min, float max) const
// Clamp the magnitude of the vector between two min and max values
Definition: Vector2.hpp:273
Vector2 Subtract(float value) const
Subtract vector by float value.
Definition: Vector2.hpp:118
bool CheckCollision(::Vector2 center, float radius) const
Check if point is inside circle.
Definition: Vector2.hpp:368
Vector2 Divide(const ::Vector2 &vector2) const
Divide vector by vector.
Definition: Vector2.hpp:189
bool CheckCollisionCircle(float radius, ::Rectangle rec) const
Check collision between circle and rectangle.
Definition: Vector2.hpp:356
static Vector2 Zero()
Vector with components value 0.0f.
Definition: Vector2.hpp:315
void DrawCircle(float radius, ::Color color={0, 0, 0, 255}) const
Draw a color-filled circle (Vector version)
Definition: Vector2.hpp:338
bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const
Check collision between two circles.
Definition: Vector2.hpp:349
Vector2 Reflect(const ::Vector2 &normal) const
Calculate reflected vector to normal.
Definition: Vector2.hpp:244
Vector2 Multiply(const ::Vector2 &vector2) const
Multiply vector by vector.
Definition: Vector2.hpp:151
Vector2 operator+(const ::Vector2 &vector2) const
Add two vectors (v1 + v2)
Definition: Vector2.hpp:62
Vector2 operator/(const ::Vector2 &vector2) const
Divide vector by vector.
Definition: Vector2.hpp:195
Vector2 & operator-=(float value)
Subtract vector by float value.
Definition: Vector2.hpp:132
Vector2 Negate() const
Negate vector.
Definition: Vector2.hpp:141
Vector2 Scale(const float scale) const
Scale vector (multiply by value)
Definition: Vector2.hpp:170
Vector2 Add(const ::Vector2 &vector2) const
Add two vectors (v1 + v2)
Definition: Vector2.hpp:57
Vector2 operator*(const ::Vector2 &vector2) const
Multiply vector by vector.
Definition: Vector2.hpp:156
Vector2 operator/(const float div) const
Divide vector by value.
Definition: Vector2.hpp:214
Vector2 operator+(float value) const
Add vector and float value.
Definition: Vector2.hpp:83
Vector2 Invert() const
Invert the given vector.
Definition: Vector2.hpp:263
Vector2 Add(float value) const
Add vector and float value.
Definition: Vector2.hpp:76
Vector2 & operator*=(const ::Vector2 &vector2)
Multiply vector by vector.
Definition: Vector2.hpp:161
bool CheckCollisionPointLine(::Vector2 p1, ::Vector2 p2, int threshold=1) const
Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels...
Definition: Vector2.hpp:390
Vector2 Transform(::Matrix mat) const
Transforms a Vector2 by a given Matrix.
Definition: Vector2.hpp:234
bool CheckCollisionLines(::Vector2 endPos1, ::Vector2 startPos2, ::Vector2 endPos2, ::Vector2 *collisionPoint) const
Check the collision between two lines defined by two points each, returns collision point by referenc...
Definition: Vector2.hpp:383
static Vector2 One()
Vector with components value 1.0f.
Definition: Vector2.hpp:320
Vector2 & operator/=(const float div)
Divide vector by value.
Definition: Vector2.hpp:219
int Equals(::Vector2 q) const
Check whether two given vectors are almost equal.
Definition: Vector2.hpp:278
Vector2 Rotate(Radian angle) const
Rotate Vector by float in radians.
Definition: Vector2.hpp:249
Vector2 Normalize() const
Normalize provided vector.
Definition: Vector2.hpp:229
Vector2 operator-() const
Negate vector.
Definition: Vector2.hpp:146
Vector2 operator-(const ::Vector2 &vector2) const
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:104
Vector2 Divide(const float div) const
Divide vector by value.
Definition: Vector2.hpp:209
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8