From 325d8c2348b5cabe32d1e90ce28a049f278e3f8c Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sat, 15 Apr 2017 22:38:14 +0100 Subject: Added test bench --- include/YAGE/Physics/body.hpp | 30 ++++++++++++++++++++++++++---- include/YAGE/Physics/collider.hpp | 26 ++++++++++++++++++++++++-- include/YAGE/Physics/collisionbody.hpp | 6 ++++++ include/YAGE/Physics/rectanglecollider.hpp | 22 ++++++++++++++++++++++ include/YAGE/Physics/rigidbody.hpp | 23 +++++++++++++++++++++++ 5 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 include/YAGE/Physics/rectanglecollider.hpp create mode 100644 include/YAGE/Physics/rigidbody.hpp (limited to 'include') 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 +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 ¢er_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 +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 + +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 ¢er_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 -- cgit