Gamedev Framework (gf)  0.2.0
A C++11 framework for 2D games
Collision.h
1 /*
2  * Gamedev Framework (gf)
3  * Copyright (C) 2016 Julien Bernard
4  *
5  * This software is provided 'as-is', without any express or implied
6  * warranty. In no event will the authors be held liable for any damages
7  * arising from the use of this software.
8  *
9  * Permission is granted to anyone to use this software for any purpose,
10  * including commercial applications, and to alter it and redistribute it
11  * freely, subject to the following restrictions:
12  *
13  * 1. The origin of this software must not be misrepresented; you must not
14  * claim that you wrote the original software. If you use this software
15  * in a product, an acknowledgment in the product documentation would be
16  * appreciated but is not required.
17  * 2. Altered source versions must be plainly marked as such, and must not be
18  * misrepresented as being the original software.
19  * 3. This notice may not be removed or altered from any source distribution.
20  */
21 #ifndef GF_COLLISION_H
22 #define GF_COLLISION_H
23 
24 #include "Circ.h"
25 #include "Portability.h"
26 #include "Rect.h"
27 #include "Vector.h"
28 
29 namespace gf {
30 #ifndef DOXYGEN_SHOULD_SKIP_THIS
31 inline namespace v1 {
32 #endif
33 
34  /**
35  * @ingroup game
36  * @brief Data about the collision between two objects
37  *
38  * @sa [How to Create a Custom Physics Engine](http://gamedevelopment.tutsplus.com/series/how-to-create-a-custom-physics-engine--gamedev-12715)
39  */
40  struct Manifold {
41  Vector2f normal; ///< Collision normal
42  float penetration; ///< Penetration depth
43  };
44 
45  /**
46  * @relates Manifold
47  * @brief Check if two circles collides
48  *
49  * @param lhs First circle
50  * @param rhs Second circle
51  * @param m Data to fill if there is a collision
52  * @return True if there is a collision
53  */
54  GF_API bool collides(const CircF& lhs, const CircF& rhs, Manifold& m);
55 
56  /**
57  * @relates Manifold
58  * @brief Check if a rectangle collides with a circle
59  *
60  * @param lhs The rectangle
61  * @param rhs The circle
62  * @param m Data to fill if there is a collision
63  * @return True if there is a collision
64  */
65  GF_API bool collides(const RectF& lhs, const CircF& rhs, Manifold& m);
66 
67  /**
68  * @relates Manifold
69  * @brief Check if a circle collides with a rectangle
70  *
71  * @param lhs The circle
72  * @param rhs The rectangle
73  * @param m Data to fill if there is a collision
74  * @return True if there is a collision
75  */
76  GF_API bool collides(const CircF& lhs, const RectF& rhs, Manifold& m);
77 
78  /**
79  * @relates Manifold
80  * @brief Check if two rectangles collides
81  *
82  * @param lhs First rectangle
83  * @param rhs Second rectangle
84  * @param m Data to fill if there is a collision
85  * @return True if there is a collision
86  */
87  GF_API bool collides(const RectF& lhs, const RectF& rhs, Manifold& m);
88 
89 
90 #ifndef DOXYGEN_SHOULD_SKIP_THIS
91 }
92 #endif
93 }
94 
95 #endif // GF_COLLISION_H
bool collides(const CircF &lhs, const RectF &rhs, Manifold &m)
Check if a circle collides with a rectangle.
Vector2f normal
Collision normal.
Definition: Collision.h:41
bool collides(const CircF &lhs, const CircF &rhs, Manifold &m)
Check if two circles collides.
Definition: Action.h:34
bool collides(const RectF &lhs, const RectF &rhs, Manifold &m)
Check if two rectangles collides.
float penetration
Penetration depth.
Definition: Collision.h:42
Data about the collision between two objects.
Definition: Collision.h:40
bool collides(const RectF &lhs, const CircF &rhs, Manifold &m)
Check if a rectangle collides with a circle.
#define GF_API
Definition: Portability.h:35