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.hpp"
11#include "./raymath.hpp"
12#include "./raylib-cpp-utils.hpp"
13#include "./RadiansDegrees.hpp"
14
15namespace raylib {
19class Vector2 : public ::Vector2 {
20 public:
21 Vector2(const ::Vector2& vec) : ::Vector2{vec.x, vec.y} {}
22
23 Vector2(float x, float y) : ::Vector2{x, y} {}
24 Vector2(float x) : ::Vector2{x, 0} {}
25 Vector2() : ::Vector2{0, 0} {}
26
27 GETTERSETTER(float, X, x)
28 GETTERSETTER(float, Y, y)
29
33 Vector2& operator=(const ::Vector2& vector2) {
34 set(vector2);
35 return *this;
36 }
37
41 bool operator==(const ::Vector2& other) const {
42 return x == other.x
43 && y == other.y;
44 }
45
49 bool operator!=(const ::Vector2& other) const {
50 return !(*this == other);
51 }
52
53 std::string ToString() const {
54 return TextFormat("Vector2(%f, %f)", x, y);
55 }
56
57 operator std::string() const {
58 return ToString();
59 }
60
61#ifndef RAYLIB_CPP_NO_MATH
65 Vector2 Add(const ::Vector2& vector2) const {
66 return Vector2Add(*this, vector2);
67 }
68
72 Vector2 operator+(const ::Vector2& vector2) const {
73 return Vector2Add(*this, vector2);
74 }
75
79 Vector2& operator+=(const ::Vector2& vector2) {
80 set(Vector2Add(*this, vector2));
81
82 return *this;
83 }
84
88 Vector2 Subtract(const ::Vector2& vector2) const {
89 return Vector2Subtract(*this, vector2);
90 }
91
95 Vector2 operator-(const ::Vector2& vector2) const {
96 return Vector2Subtract(*this, vector2);
97 }
98
102 Vector2& operator-=(const ::Vector2& vector2) {
103 set(Vector2Subtract(*this, vector2));
104
105 return *this;
106 }
107
111 Vector2 Negate() const {
112 return Vector2Negate(*this);
113 }
114
119 return Vector2Negate(*this);
120 }
121
125 Vector2 Multiply(const ::Vector2& vector2) const {
126 return Vector2Multiply(*this, vector2);
127 }
128
132 Vector2 operator*(const ::Vector2& vector2) const {
133 return Vector2Multiply(*this, vector2);
134 }
135
139 Vector2& operator*=(const ::Vector2& vector2) {
140 set(Vector2Multiply(*this, vector2));
141
142 return *this;
143 }
144
148 Vector2 Scale(const float scale) const {
149 return Vector2Scale(*this, scale);
150 }
151
155 Vector2 operator*(const float scale) const {
156 return Vector2Scale(*this, scale);
157 }
158
162 Vector2& operator*=(const float scale) {
163 set(Vector2Scale(*this, scale));
164
165 return *this;
166 }
167
171 Vector2 Divide(const ::Vector2& vector2) const {
172 return Vector2Divide(*this, vector2);
173 }
174
178 Vector2 operator/(const ::Vector2& vector2) const {
179 return Vector2Divide(*this, vector2);
180 }
181
185 Vector2& operator/=(const ::Vector2& vector2) {
186 set(Vector2Divide(*this, vector2));
187
188 return *this;
189 }
190
194 Vector2 Divide(const float div) const {
195 return ::Vector2{x / div, y / div};
196 }
197
201 Vector2 operator/(const float div) const {
202 return Divide(div);
203 }
204
208 Vector2& operator/=(const float div) {
209 this->x /= div;
210 this->y /= div;
211
212 return *this;
213 }
214
219 return Vector2Normalize(*this);
220 }
221
225 Vector2 Transform(::Matrix mat) const {
226 return ::Vector2Transform(*this, mat);
227 }
228
232 Vector2 Lerp(const ::Vector2& vector2, float amount) const {
233 return Vector2Lerp(*this, vector2, amount);
234 }
235
239 Vector2 Reflect(const ::Vector2& normal) const {
240 return Vector2Reflect(*this, normal);
241 }
242
246 Vector2 Rotate(Radian angle) const {
247 return Vector2Rotate(*this, angle);
248 }
249
253 Vector2 MoveTowards(const ::Vector2& target, float maxDistance) const {
254 return Vector2MoveTowards(*this, target, maxDistance);
255 }
256
260 Vector2 Invert() const {
261 return ::Vector2Invert(*this);
262 }
263
267 Vector2 Clamp(::Vector2 min, ::Vector2 max) const {
268 return ::Vector2Clamp(*this, min, max);
269 }
270
274 Vector2 Clamp(float min, float max) const {
275 return ::Vector2ClampValue(*this, min, max);
276 }
277
281 int Equals(::Vector2 q) const {
282 return ::Vector2Equals(*this, q);
283 }
284
288 float Length() const {
289 return Vector2Length(*this);
290 }
291
295 float LengthSqr() const {
296 return Vector2LengthSqr(*this);
297 }
298
302 float DotProduct(const ::Vector2& vector2) const {
303 return Vector2DotProduct(*this, vector2);
304 }
305
309 float Distance(const ::Vector2& vector2) const {
310 return Vector2Distance(*this, vector2);
311 }
312
316 float DistanceSqr(::Vector2 v2) const {
317 return ::Vector2DistanceSqr(*this, v2);
318 }
319
323 Radian Angle(const ::Vector2& vector2) const {
324 return Vector2Angle(*this, vector2);
325 }
326
330 static Vector2 Zero() {
331 return Vector2Zero();
332 }
333
337 static Vector2 One() {
338 return Vector2One();
339 }
340#endif
341
342 void DrawPixel(::Color color = {0, 0, 0, 255}) const {
343 ::DrawPixelV(*this, color);
344 }
345
346 void DrawLine(::Vector2 endPos, ::Color color = {0, 0, 0, 255}) const {
347 ::DrawLineV(*this, endPos, color);
348 }
349
350 void DrawLine(::Vector2 endPos, float thick, ::Color color = {0, 0, 0, 255}) const {
351 ::DrawLineEx(*this, endPos, thick, color);
352 }
353
354 void DrawLineBezier(::Vector2 endPos, float thick, ::Color color = {0, 0, 0, 255}) const {
355 ::DrawLineBezier(*this, endPos, thick, color);
356 }
357
361 void DrawCircle(float radius, ::Color color = {0, 0, 0, 255}) const {
362 ::DrawCircleV(*this, radius, color);
363 }
364
365 void DrawRectangle(::Vector2 size, ::Color color = {0, 0, 0, 255}) const {
366 ::DrawRectangleV(*this, size, color);
367 }
368
369 void DrawPoly(int sides, float radius, Degree rotation, ::Color color = {0, 0, 0, 255}) const {
370 ::DrawPoly(*this, sides, radius, rotation, color);
371 }
372
376 bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const {
377 return ::CheckCollisionCircles(*this, radius1, center2, radius2);
378 }
379
383 bool CheckCollisionCircle(float radius, ::Rectangle rec) const {
384 return ::CheckCollisionCircleRec(*this, radius, rec);
385 }
386
390 bool CheckCollision(::Rectangle rec) const {
391 return ::CheckCollisionPointRec(*this, rec);
392 }
393
397 bool CheckCollision(::Vector2 center, float radius) const {
398 return ::CheckCollisionPointCircle(*this, center, radius);
399 }
400
404 bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const {
405 return ::CheckCollisionPointTriangle(*this, p1, p2, p3);
406 }
407
412 ::Vector2 endPos1,
413 ::Vector2 startPos2, ::Vector2 endPos2,
414 ::Vector2 *collisionPoint) const {
415 return ::CheckCollisionLines(*this, endPos1, startPos2, endPos2, collisionPoint);
416 }
417
421 bool CheckCollisionPointLine(::Vector2 p1, ::Vector2 p2, int threshold = 1) const {
422 return ::CheckCollisionPointLine(*this, p1, p2, threshold);
423 }
424
425 protected:
426 void set(const ::Vector2& vec) {
427 x = vec.x;
428 y = vec.y;
429 }
430};
431
432} // namespace raylib
433
435
436#endif // RAYLIB_CPP_INCLUDE_VECTOR2_HPP_
Radian type (allows automatic worry free conversion between radians and degrees)
Vector2 type.
Definition: Vector2.hpp:19
bool operator==(const ::Vector2 &other) const
Determine whether or not the vectors are equal.
Definition: Vector2.hpp:41
Vector2 & operator-=(const ::Vector2 &vector2)
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:102
bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const
Check if point is inside a triangle.
Definition: Vector2.hpp:404
Vector2 MoveTowards(const ::Vector2 &target, float maxDistance) const
Move Vector towards target.
Definition: Vector2.hpp:253
Radian Angle(const ::Vector2 &vector2) const
Calculate angle from two vectors in X-axis.
Definition: Vector2.hpp:323
Vector2 Subtract(const ::Vector2 &vector2) const
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:88
Vector2 Clamp(::Vector2 min, ::Vector2 max) const
Clamp the components of the vector between.
Definition: Vector2.hpp:267
Vector2 operator*(const float scale) const
Scale vector (multiply by value)
Definition: Vector2.hpp:155
bool CheckCollision(::Rectangle rec) const
Check if point is inside rectangle.
Definition: Vector2.hpp:390
bool operator!=(const ::Vector2 &other) const
Determines if the vectors are not equal.
Definition: Vector2.hpp:49
Vector2 Lerp(const ::Vector2 &vector2, float amount) const
Calculate linear interpolation between two vectors.
Definition: Vector2.hpp:232
Vector2 & operator*=(const float scale)
Scale vector (multiply by value)
Definition: Vector2.hpp:162
Vector2 & operator/=(const ::Vector2 &vector2)
Divide vector by vector.
Definition: Vector2.hpp:185
float Length() const
Calculate vector length.
Definition: Vector2.hpp:288
float DotProduct(const ::Vector2 &vector2) const
Calculate two vectors dot product.
Definition: Vector2.hpp:302
float LengthSqr() const
Calculate vector square length.
Definition: Vector2.hpp:295
float DistanceSqr(::Vector2 v2) const
Calculate square distance between two vectors.
Definition: Vector2.hpp:316
float Distance(const ::Vector2 &vector2) const
Calculate distance between two vectors.
Definition: Vector2.hpp:309
Vector2 & operator+=(const ::Vector2 &vector2)
Add two vectors (v1 + v2)
Definition: Vector2.hpp:79
Vector2 Clamp(float min, float max) const
// Clamp the magnitude of the vector between two min and max values
Definition: Vector2.hpp:274
bool CheckCollision(::Vector2 center, float radius) const
Check if point is inside circle.
Definition: Vector2.hpp:397
Vector2 Divide(const ::Vector2 &vector2) const
Divide vector by vector.
Definition: Vector2.hpp:171
bool CheckCollisionCircle(float radius, ::Rectangle rec) const
Check collision between circle and rectangle.
Definition: Vector2.hpp:383
static Vector2 Zero()
Vector with components value 0.0f.
Definition: Vector2.hpp:330
void DrawCircle(float radius, ::Color color={0, 0, 0, 255}) const
Draw a color-filled circle (Vector version)
Definition: Vector2.hpp:361
bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const
Check collision between two circles.
Definition: Vector2.hpp:376
Vector2 Reflect(const ::Vector2 &normal) const
Calculate reflected vector to normal.
Definition: Vector2.hpp:239
Vector2 Multiply(const ::Vector2 &vector2) const
Multiply vector by vector.
Definition: Vector2.hpp:125
Vector2 operator+(const ::Vector2 &vector2) const
Add two vectors (v1 + v2)
Definition: Vector2.hpp:72
Vector2 operator/(const ::Vector2 &vector2) const
Divide vector by vector.
Definition: Vector2.hpp:178
Vector2 Negate() const
Negate vector.
Definition: Vector2.hpp:111
Vector2 Scale(const float scale) const
Scale vector (multiply by value)
Definition: Vector2.hpp:148
Vector2 Add(const ::Vector2 &vector2) const
Add two vectors (v1 + v2)
Definition: Vector2.hpp:65
Vector2 operator*(const ::Vector2 &vector2) const
Multiply vector by vector.
Definition: Vector2.hpp:132
Vector2 operator/(const float div) const
Divide vector by value.
Definition: Vector2.hpp:201
Vector2 Invert() const
Invert the given vector.
Definition: Vector2.hpp:260
Vector2 & operator*=(const ::Vector2 &vector2)
Multiply vector by vector.
Definition: Vector2.hpp:139
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:421
Vector2 Transform(::Matrix mat) const
Transforms a Vector2 by a given Matrix.
Definition: Vector2.hpp:225
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:411
static Vector2 One()
Vector with components value 1.0f.
Definition: Vector2.hpp:337
Vector2 & operator/=(const float div)
Divide vector by value.
Definition: Vector2.hpp:208
int Equals(::Vector2 q) const
Check whether two given vectors are almost equal.
Definition: Vector2.hpp:281
Vector2 Rotate(Radian angle) const
Rotate Vector by float in radians.
Definition: Vector2.hpp:246
Vector2 Normalize() const
Normalize provided vector.
Definition: Vector2.hpp:218
Vector2 operator-() const
Negate vector.
Definition: Vector2.hpp:118
Vector2 operator-(const ::Vector2 &vector2) const
Subtract two vectors (v1 - v2)
Definition: Vector2.hpp:95
Vector2 Divide(const float div) const
Divide vector by value.
Definition: Vector2.hpp:194