Rune Engine  Version 0.2.7-alpha
Documentation for how to make games using the Rune Engine.
rigidBody.h
1 
9 #ifndef RIGIDBODY_H
10 #define RIGIDBODY_H
11 
12 #include "core.h"
13 #include <vector>
14 #include <Math\Vec2.h>
15 #include <Entities\component.h>
16 #include <Entities\gameObject.h>
17 #include <Renderer\rectangleShape.h>
18 
19 namespace physics{
20 
21 //Forward declaration of rigid body class
22 class RigidBody;
23 
25 struct collision
26 {
27 
28  RigidBody* objectOne;
29  RigidBody* objectTwo;
30  rune::Vec2 normalVector;
31  double depth;
32 
33  collision() : objectOne(nullptr), objectTwo(nullptr), normalVector(rune::Vec2(0,0)), depth(0)
34  {
35 
36  }
37 
38 };
39 
41 struct AABB
42 {
43 
46 
47  AABB() : min(rune::Vec2(0,0)), max(rune::Vec2(0,0))
48  {
49 
50  }
51 
52 };
53 
55 struct body
56 {
62  double xPos;
64  double yPos;
70  double invMass;
73 
75  double restitution;
77  double staticFriction;
79  double dynamicFriction;
80 
82  double angleOfRotation;
84  double angularVelocity;
86  double torque;
88  double invInertia;
91 
92 };
93 
94 class RUNE_ENGINE RigidBody : public rune::Component
95 {
96 
97 private:
98  body objectBody;
99  std::vector<collision> involvedCollisions;
100 
101 public:
103  virtual void start();
105  RigidBody(double mass = 0, rune::Vec2 gravity = rune::Vec2(0,0));
107  void setUpObject(int width, int height, double mass, bool rotation);
109  void updateAABB();
111  void setMass(float newMass);
113  AABB getBoundingBox(void);
115  void addAngularVelocity(double angularVel);
117  void setRotation(double angle);
119  void setPosition(rune::Vec2);
121  void addPosition(rune::Vec2 newPos);
123  rune::Vec2 getPosition(void);
125  void addVelocity(rune::Vec2);
127  void updatePosition(double dT);
129  void interpolatePosition(double alpha);
131  rune::Vec2 getGravity(void);
133  rune::Vec2 getVelocity(void);
135  void setVelocity(rune::Vec2);
137  rune::Vec2 getVertex(int);
139  double getInvMass(void);
141  double getInvIntertia(void);
143  double getRestitution(void);
145  void setRestitution(double);
147  double getStaticFriction(void);
149  void setStaticFriction(float friction);
151  double getDynamicFriction(void);
153  void setDynamicFriction(float friction);
155  double getOrientation(void);
157  double getWidth(void);
159  double getHeight(void);
161  rune::Vec2 getPreviousPosition(void);
163  void setPreviousPosition(rune::Vec2);
165  void clearCollisions(void);
167  void addCollision(collision);
169  std::vector<collision> getCollisions(void);
171  body* getBodyStruct(void);
172 
173 };
174 }
175 
176 #endif
177 
physics
The physics module responsible for handling and resolving collisions between physics::Collider2D.
Definition: AABB.h:7
physics::body::vertexes
rune::Vec2 vertexes[4]
Vertices of the body.
Definition: rigidBody.h:58
physics::body::invMass
double invMass
1/mass of the object
Definition: rigidBody.h:70
physics::body::restitution
double restitution
How bouncy, between 0 and 1.
Definition: rigidBody.h:75
physics::RigidBody
Game object component that allows a game object to have collisions with other objects.
Definition: rigidBody.h:95
rune::Component
A component of a rune::GameObject, this class is used to add functionality to a object in the game wo...
Definition: component.h:23
physics::collision
Collision manifold used for reporting rigid body collisions.
Definition: collision.h:8
physics::AABB::max
rune::Vec2 max
Top right corner of the AABB.
Definition: AABB.h:16
physics::AABB::min
rune::Vec2 min
Bottom left corner of the AABB.
Definition: AABB.h:14
physics::body::oldPosition
rune::Vec2 oldPosition
Previous position in world coordinates.
Definition: rigidBody.h:66
physics::body::angleOfRotation
double angleOfRotation
Coefficient of dynamic friction.
Definition: rigidBody.h:82
physics::body::gravityFactor
rune::Vec2 gravityFactor
How much gravity does this object have.
Definition: rigidBody.h:72
physics::body::boundingBox
AABB boundingBox
Broad phase Minimum bounding box.
Definition: rigidBody.h:60
physics::body::xPos
double xPos
X position in world coordinates.
Definition: rigidBody.h:62
physics::body::torque
double torque
Rotational torque on the object.
Definition: rigidBody.h:86
physics::body::staticFriction
double staticFriction
Coefficient of static friction.
Definition: rigidBody.h:77
physics::body::angularVelocity
double angularVelocity
Rate of change of rotation.
Definition: rigidBody.h:84
rune::Vec2
1 x 2 vector to be used for math.
Definition: vec2.h:20
physics::body::yPos
double yPos
Y Position in world coordinates.
Definition: rigidBody.h:64
physics::body::invInertia
double invInertia
Inverse inertia of the body.
Definition: rigidBody.h:88
physics::body
Rigid body struct containing all the information for a physically realistic response.
Definition: rigidBody.h:56
physics::body::dynamicFriction
double dynamicFriction
Coefficient of dynamic friction.
Definition: rigidBody.h:79
physics::body::velocity
rune::Vec2 velocity
Velocity.
Definition: rigidBody.h:68
physics::body::rotationalRadius
double rotationalRadius
Largest radius that can have a moment applied to it.
Definition: rigidBody.h:90
rune
The main namespace to be used for interfacing with the engine.
Definition: animator.h:21
physics::AABB
Axis aligned bounding box for each object.
Definition: AABB.h:10