Angel 3.2
A 2D Game Prototyping Engine
Vector2.h
1 
2 // Copyright (C) 2008-2013, Shane Liesegang
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 // * Neither the name of the copyright holder nor the names of any
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 // POSSIBILITY OF SUCH DAMAGE.
29 
30 #pragma once
31 
32 #include "../Infrastructure/Common.h"
33 #include "../Infrastructure/VecStructs.h"
34 
36 
41 struct Vector2
42 {
47  float X;
48 
52  float Y;
53 
61  static Vector2 Zero;
62 
70  static Vector2 One;
71 
79  static Vector2 UnitX;
80 
88  static Vector2 UnitY;
89 
96  Vector2(float x, float y);
97 
103  Vector2(float value);
104 
110  Vector2(const Vec2i& copy);
111 
115  Vector2();
116 
117 
124  float Length();
125 
133  float LengthSquared();
134 
144  static float Distance(const Vector2& value1, const Vector2& value2);
145 
155  static float DistanceSquared(const Vector2& value1, const Vector2& value2);
156 
164  static float Dot(const Vector2& value1, const Vector2& value2);
165 
177  static float Cross(const Vector2& value1, const Vector2& value2);
178 
183  void Normalize();
184 
191  static Vector2 Normalize(const Vector2& value);
192 
200  static Vector2 Reflect(const Vector2& vector, const Vector2& normal);
201 
207  static Vector2 Min(const Vector2& value1, const Vector2& value2);
208 
214  static Vector2 Max(const Vector2& value1, const Vector2& value2);
215 
224  static Vector2 Clamp(const Vector2& value, const Vector2& min, const Vector2& max);
225 
234  static Vector2 Lerp(const Vector2& value1, const Vector2& value2, float amount);
235 
243  static Vector2 Negate(const Vector2& value);
244 
252  static Vector2 Rotate(const Vector2& value, const float radians);
253 
254  bool operator==(const Vector2 &v) const;
255  bool operator!=(const Vector2 &v) const;
256 
257  Vector2 operator-() const;
258  Vector2 operator-(const Vector2 &v) const;
259  Vector2 operator+(const Vector2 &v) const;
260  Vector2 operator/(float divider) const;
261  Vector2 operator*(float scaleFactor) const;
262 
263  Vector2& operator+=(const Vector2 &v);
264  Vector2& operator-=(const Vector2 &v);
265  Vector2& operator*=(float f);
266  Vector2& operator/=(float f);
267 };
268 
269 typedef std::vector<Vector2> Vector2List;