raylib-cpp
C++ object-oriented wrapper library for raylib.
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 "./raylib.hpp"
9 #include "./raymath.hpp"
10 #include "./raylib-cpp-utils.hpp"
11 
12 namespace raylib {
16 class Vector2 : public ::Vector2 {
17  public:
18  Vector2(const ::Vector2& vec) {
19  set(vec);
20  }
21 
22  Vector2(float x, float y) : ::Vector2{x, y} {}
23  Vector2(float x) : ::Vector2{x, 0} {}
24  Vector2() : ::Vector2{0, 0} {}
25 
26  GETTERSETTER(float, X, x)
27  GETTERSETTER(float, Y, y)
28 
29  Vector2& operator=(const ::Vector2& vector2) {
30  set(vector2);
31  return *this;
32  }
33 
34  bool operator==(const ::Vector2& other) {
35  return x == other.x
36  && y == other.y;
37  }
38 
39  bool operator!=(const ::Vector2& other) {
40  return !(*this == other);
41  }
42 
43 #ifndef RAYLIB_CPP_NO_MATH
44  Vector2 Add(const ::Vector2& vector2) const {
45  return Vector2Add(*this, vector2);
46  }
47 
48  Vector2 operator+(const ::Vector2& vector2) const {
49  return Vector2Add(*this, vector2);
50  }
51 
52  Vector2 Subtract(const ::Vector2& vector2) const {
53  return Vector2Subtract(*this, vector2);
54  }
55 
56  Vector2 operator-(const ::Vector2& vector2) const {
57  return Vector2Subtract(*this, vector2);
58  }
59 
60  Vector2 Negate() const {
61  return Vector2Negate(*this);
62  }
63 
64  Vector2 operator-() const {
65  return Vector2Negate(*this);
66  }
67 
68  Vector2 Multiply(const ::Vector2& vector2) const {
69  return Vector2Multiply(*this, vector2);
70  }
71 
72  Vector2 operator*(const ::Vector2& vector2) const {
73  return Vector2Multiply(*this, vector2);
74  }
75 
76  Vector2 Scale(const float scale) const {
77  return Vector2Scale(*this, scale);
78  }
79 
80  Vector2 operator*(const float scale) const {
81  return Vector2Scale(*this, scale);
82  }
83 
84  Vector2 Divide(const ::Vector2& vector2) const {
85  return Vector2Divide(*this, vector2);
86  }
87 
88  Vector2 operator/(const ::Vector2& vector2) const {
89  return Vector2Divide(*this, vector2);
90  }
91 
92  Vector2 Divide(const float div) const {
93  return ::Vector2{x / div, y / div};
94  }
95 
96  Vector2 operator/(const float div) const {
97  return Divide(div);
98  }
99 
100  Vector2& operator+=(const ::Vector2& vector2) {
101  set(Vector2Add(*this, vector2));
102 
103  return *this;
104  }
105 
106  Vector2& operator-=(const ::Vector2& vector2) {
107  set(Vector2Subtract(*this, vector2));
108 
109  return *this;
110  }
111 
112 
113  Vector2& operator*=(const ::Vector2& vector2) {
114  set(Vector2Multiply(*this, vector2));
115 
116  return *this;
117  }
118 
119  Vector2& operator*=(const float scale) {
120  set(Vector2Scale(*this, scale));
121 
122  return *this;
123  }
124 
125  Vector2& operator/=(const ::Vector2& vector2) {
126  set(Vector2Divide(*this, vector2));
127 
128  return *this;
129  }
130 
131  Vector2& operator/=(const float div) {
132  this->x /= div;
133  this->y /= div;
134 
135  return *this;
136  }
137 
141  float Length() const {
142  return Vector2Length(*this);
143  }
144 
148  float LengthSqr() const {
149  return Vector2LengthSqr(*this);
150  }
151 
155  Vector2 Normalize() const {
156  return Vector2Normalize(*this);
157  }
158 
162  float DotProduct(const ::Vector2& vector2) const {
163  return Vector2DotProduct(*this, vector2);
164  }
165 
169  float Angle(const ::Vector2& vector2) const {
170  return Vector2Angle(*this, vector2);
171  }
172 
176  float Distance(const ::Vector2& vector2) const {
177  return Vector2Distance(*this, vector2);
178  }
179 
183  Vector2 Lerp(const ::Vector2& vector2, float amount) const {
184  return Vector2Lerp(*this, vector2, amount);
185  }
186 
190  Vector2 Reflect(const ::Vector2& normal) const {
191  return Vector2Reflect(*this, normal);
192  }
193 
197  Vector2 Rotate(float degrees) const {
198  return Vector2Rotate(*this, degrees);
199  }
200 
204  Vector2 MoveTowards(const ::Vector2& target, float maxDistance) const {
205  return Vector2MoveTowards(*this, target, maxDistance);
206  }
207 
211  static Vector2 Zero() {
212  return Vector2Zero();
213  }
214 
218  static Vector2 One() {
219  return Vector2One();
220  }
221 #endif
222 
223  inline Vector2& DrawPixel(::Color color) {
224  ::DrawPixelV(*this, color);
225  return *this;
226  }
227 
228  inline Vector2& DrawLine(::Vector2 endPos, ::Color color) {
229  ::DrawLineV(*this, endPos, color);
230  return *this;
231  }
232 
233  inline Vector2& DrawLine(::Vector2 endPos, float thick, ::Color color) {
234  ::DrawLineEx(*this, endPos, thick, color);
235  return *this;
236  }
237 
238  inline Vector2& DrawLineBezier(::Vector2 endPos, float thick, ::Color color) {
239  ::DrawLineBezier(*this, endPos, thick, color);
240  return *this;
241  }
242 
247  ::Vector2 endPos,
248  ::Vector2 controlPos,
249  float thick,
250  ::Color color) {
251  ::DrawLineBezierQuad(*this, endPos, controlPos, thick, color);
252  return *this;
253  }
254 
258  inline Vector2& DrawCircle(float radius, ::Color color) {
259  ::DrawCircleV(*this, radius, color);
260  return *this;
261  }
262 
263  inline Vector2& DrawRectangle(::Vector2 size, ::Color color) {
264  ::DrawRectangleV(*this, size, color);
265  return *this;
266  }
267 
268  inline Vector2& DrawPoly(int sides, float radius, float rotation, ::Color color) {
269  ::DrawPoly(*this, sides, radius, rotation, color);
270  return *this;
271  }
272 
276  inline bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const {
277  return ::CheckCollisionCircles(*this, radius1, center2, radius2);
278  }
279 
283  inline bool CheckCollisionCircle(float radius, ::Rectangle rec) const {
284  return ::CheckCollisionCircleRec(*this, radius, rec);
285  }
286 
290  inline bool CheckCollision(::Rectangle rec) const {
291  return ::CheckCollisionPointRec(*this, rec);
292  }
293 
297  inline bool CheckCollision(::Vector2 center, float radius) const {
298  return ::CheckCollisionPointCircle(*this, center, radius);
299  }
300 
304  inline bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const {
305  return ::CheckCollisionPointTriangle(*this, p1, p2, p3);
306  }
307 
311  inline bool CheckCollisionLines(
312  ::Vector2 endPos1,
313  ::Vector2 startPos2, ::Vector2 endPos2,
314  ::Vector2 *collisionPoint) const {
315  return ::CheckCollisionLines(*this, endPos1, startPos2, endPos2, collisionPoint);
316  }
317 
318  private:
319  inline void set(const ::Vector2& vec) {
320  x = vec.x;
321  y = vec.y;
322  }
323 };
324 
325 } // namespace raylib
326 
327 #endif // RAYLIB_CPP_INCLUDE_VECTOR2_HPP_
raylib::Vector2::CheckCollision
bool CheckCollision(::Vector2 p1, ::Vector2 p2, ::Vector2 p3) const
Check if point is inside a triangle.
Definition: Vector2.hpp:304
raylib
All raylib-cpp classes and functions appear in the raylib namespace.
Definition: AudioDevice.hpp:8
raylib::Vector2::Reflect
Vector2 Reflect(const ::Vector2 &normal) const
Calculate reflected vector to normal.
Definition: Vector2.hpp:190
raylib::Vector2::MoveTowards
Vector2 MoveTowards(const ::Vector2 &target, float maxDistance) const
Move Vector towards target.
Definition: Vector2.hpp:204
raylib::Vector2::Length
float Length() const
Calculate vector length.
Definition: Vector2.hpp:141
raylib::Vector2::Normalize
Vector2 Normalize() const
Normalize provided vector.
Definition: Vector2.hpp:155
raylib::Vector2::Zero
static Vector2 Zero()
Vector with components value 0.0f.
Definition: Vector2.hpp:211
raylib::Vector2::CheckCollision
bool CheckCollision(::Rectangle rec) const
Check if point is inside rectangle.
Definition: Vector2.hpp:290
raylib::Vector2::CheckCollision
bool CheckCollision(::Vector2 center, float radius) const
Check if point is inside circle.
Definition: Vector2.hpp:297
raylib::Vector2::Lerp
Vector2 Lerp(const ::Vector2 &vector2, float amount) const
Calculate linear interpolation between two vectors.
Definition: Vector2.hpp:183
raylib::Vector2::One
static Vector2 One()
Vector with components value 1.0f.
Definition: Vector2.hpp:218
raylib::Vector2::LengthSqr
float LengthSqr() const
Calculate vector square length.
Definition: Vector2.hpp:148
raylib::Rectangle
Rectangle type.
Definition: Rectangle.hpp:12
raylib::Vector2
Vector2 type.
Definition: Vector2.hpp:16
raylib::Vector2::DrawLineBezierQuad
Vector2 & DrawLineBezierQuad(::Vector2 endPos, ::Vector2 controlPos, float thick, ::Color color)
Draw line using quadratic bezier curves with a control point.
Definition: Vector2.hpp:246
raylib::Vector2::CheckCollisionCircle
bool CheckCollisionCircle(float radius1, ::Vector2 center2, float radius2) const
Check collision between two circles.
Definition: Vector2.hpp:276
raylib::Color
Color type, RGBA (32bit)
Definition: Color.hpp:14
raylib::Vector2::CheckCollisionCircle
bool CheckCollisionCircle(float radius, ::Rectangle rec) const
Check collision between circle and rectangle.
Definition: Vector2.hpp:283
raylib::Vector2::Rotate
Vector2 Rotate(float degrees) const
Rotate Vector by float in Degrees.
Definition: Vector2.hpp:197
raylib::Vector2::Distance
float Distance(const ::Vector2 &vector2) const
Calculate distance between two vectors.
Definition: Vector2.hpp:176
raylib::Vector2::Angle
float Angle(const ::Vector2 &vector2) const
Calculate angle from two vectors in X-axis.
Definition: Vector2.hpp:169
raylib::Vector2::DotProduct
float DotProduct(const ::Vector2 &vector2) const
Calculate two vectors dot product.
Definition: Vector2.hpp:162
raylib::Vector2::DrawCircle
Vector2 & DrawCircle(float radius, ::Color color)
Draw a color-filled circle (Vector version)
Definition: Vector2.hpp:258
raylib::Vector2::CheckCollisionLines
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:311