aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-04-15 22:38:14 +0100
committerYann Herklotz <ymherklotz@gmail.com>2017-04-15 22:38:14 +0100
commit325d8c2348b5cabe32d1e90ce28a049f278e3f8c (patch)
treed90a4f188a7489f46b9835eae007c9b45f6627c2 /include
parentdaa032e2f6c86da16902f654055d8b040d7670bb (diff)
downloadYAGE-325d8c2348b5cabe32d1e90ce28a049f278e3f8c.tar.gz
YAGE-325d8c2348b5cabe32d1e90ce28a049f278e3f8c.zip
Added test bench
Diffstat (limited to 'include')
-rw-r--r--include/YAGE/Physics/body.hpp30
-rw-r--r--include/YAGE/Physics/collider.hpp26
-rw-r--r--include/YAGE/Physics/collisionbody.hpp6
-rw-r--r--include/YAGE/Physics/rectanglecollider.hpp22
-rw-r--r--include/YAGE/Physics/rigidbody.hpp23
5 files changed, 101 insertions, 6 deletions
diff --git a/include/YAGE/Physics/body.hpp b/include/YAGE/Physics/body.hpp
index 70ff2528..9806f4e3 100644
--- a/include/YAGE/Physics/body.hpp
+++ b/include/YAGE/Physics/body.hpp
@@ -3,15 +3,37 @@
#include <glm/glm.hpp>
+namespace yage
+{
+
class Body
{
-private:
- glm::vec2 centerOfMass_;
+protected:
+ // current velocity of the object
+ glm::vec2 velocity_;
+
+ // center of mass of the object
+ glm::vec2 center_of_mass_;
+
+ // mass of the object
double mass_;
+
+ // boolean that defines if gravity can act on the object
+ bool gravity_;
public:
- virtual ~Body();
-
+ virtual ~Body() {}
+
+ // apply force to the object and update the velocity
+ virtual void applyForce(const glm::vec2 &force)=0;
+protected:
+ // protected constructor to initialize member variables
+ Body(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &velocity, bool gravity) :
+ velocity_(velocity), center_of_mass_(center_of_mass),
+ mass_(mass), gravity_(gravity)
+ {}
};
+} // yage
+
#endif
diff --git a/include/YAGE/Physics/collider.hpp b/include/YAGE/Physics/collider.hpp
index ff074f14..234ff57f 100644
--- a/include/YAGE/Physics/collider.hpp
+++ b/include/YAGE/Physics/collider.hpp
@@ -1,13 +1,35 @@
#ifndef YAGE_COLLIDER_HPP
#define YAGE_COLLIDER_HPP
-// The Collider class helps collision detection
+#include <glm/glm.hpp>
+namespace yage
+{
+
+// The Collider class helps collision detection by providing a general shape
+// for different shapes to have their own collision algorithms.
class Collider
{
+protected:
+ // position of the object
+ glm::vec2 position_;
+
+ // size of the object
+ glm::vec2 size_;
+
public:
- virtual ~Collider();
+ Collider(const glm::vec2 &position, const glm::vec2 &size) : position_(position), size_(size) {}
+
+ // virtual deconstructor for classes that inherits
+ virtual ~Collider() {}
+
+ // function that checks if two colliders are colliding
+ virtual bool collides(const Collider &collider) const=0;
+
+ // function that returns if a point is inside the shape
+ virtual bool inside(const glm::vec2 &point) const=0;
};
+} // yage
#endif
diff --git a/include/YAGE/Physics/collisionbody.hpp b/include/YAGE/Physics/collisionbody.hpp
index ecbd22dc..c5f8e1f6 100644
--- a/include/YAGE/Physics/collisionbody.hpp
+++ b/include/YAGE/Physics/collisionbody.hpp
@@ -3,6 +3,11 @@
#include "Physics/body.hpp"
+namespace yage
+{
+
+// a collision body will be a body that is static and not affected by gravity,
+// with infinite mass
class CollisionBody : public Body
{
public:
@@ -10,5 +15,6 @@ public:
virtual ~CollisionBody();
};
+} // yage
#endif
diff --git a/include/YAGE/Physics/rectanglecollider.hpp b/include/YAGE/Physics/rectanglecollider.hpp
new file mode 100644
index 00000000..b4762ea6
--- /dev/null
+++ b/include/YAGE/Physics/rectanglecollider.hpp
@@ -0,0 +1,22 @@
+#ifndef YAGE_RECTANGLE_COLLIDER_HPP
+#define YAGE_RECTANGLE_COLLIDER_HPP
+
+#include "Physics/collider.hpp"
+
+#include <glm/glm.hpp>
+
+namespace yage
+{
+
+class RectangleCollider : public Collider
+{
+public:
+ RectangleCollider(const glm::vec2 &position, const glm::vec2 &size);
+
+ virtual bool collides(const Collider &collider) const;
+ virtual bool inside(const glm::vec2 &point) const;
+};
+
+} // yage
+
+#endif
diff --git a/include/YAGE/Physics/rigidbody.hpp b/include/YAGE/Physics/rigidbody.hpp
new file mode 100644
index 00000000..47f3bc01
--- /dev/null
+++ b/include/YAGE/Physics/rigidbody.hpp
@@ -0,0 +1,23 @@
+#ifndef YAGE_RIGID_BODY_HPP
+#define YAGE_RIGID_BODY_HPP
+
+#include "Physics/body.hpp"
+
+namespace yage
+{
+
+class RigidBody : public Body
+{
+public:
+ RigidBody(const glm::vec2 &center_of_mass,
+ double mass,
+ const glm::vec2 &velocity=glm::vec2(0.f, 0.f),
+ bool gravity=true);
+
+ // apply a force to the rigid body
+ virtual void applyForce(const glm::vec2 &force);
+};
+
+} // yage
+
+#endif