aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-05-17 10:36:59 +0100
committerYann Herklotz <ymherklotz@gmail.com>2017-05-17 10:36:59 +0100
commit7583ad924479b11bbd45122194b53a7b6c8f7a0e (patch)
treef454120b7bd2f5cc344eb221f975321842980a13 /src
parentf7fc06b5066018451b6b456be0dbc46bafe2fd88 (diff)
downloadYAGE-7583ad924479b11bbd45122194b53a7b6c8f7a0e.tar.gz
YAGE-7583ad924479b11bbd45122194b53a7b6c8f7a0e.zip
Adding files
Diffstat (limited to 'src')
-rw-r--r--src/body.cpp24
-rw-r--r--src/body.cpps1
-rw-r--r--src/rigidbody.cpp24
3 files changed, 44 insertions, 5 deletions
diff --git a/src/body.cpp b/src/body.cpp
new file mode 100644
index 00000000..fb6c40e7
--- /dev/null
+++ b/src/body.cpp
@@ -0,0 +1,24 @@
+#include "Physics/body.hpp"
+
+namespace yage
+{
+
+Body::~Body()
+{}
+
+Body::Body(const glm::vec2 &center_of_mass, double mass, const glm::vec2 &force, const glm::vec2 &velocity, bool gravity) :
+ force_(force), velocity_(velocity), center_of_mass_(center_of_mass),
+ mass_(mass), gravity_(gravity)
+{}
+
+float Body::xPosition() const
+{
+ return center_of_mass_.x;
+}
+
+float Body::yPosition() const
+{
+ return center_of_mass_.y;
+}
+
+} // yage
diff --git a/src/body.cpps b/src/body.cpps
new file mode 100644
index 00000000..3cacc0b9
--- /dev/null
+++ b/src/body.cpps
@@ -0,0 +1 @@
+12 \ No newline at end of file
diff --git a/src/rigidbody.cpp b/src/rigidbody.cpp
index 4d774937..d8b963de 100644
--- a/src/rigidbody.cpp
+++ b/src/rigidbody.cpp
@@ -9,15 +9,29 @@ RigidBody::RigidBody(const glm::vec2 &center_of_mass, double mass, const glm::ve
void RigidBody::applyForce(const glm::vec2 &force)
{
+ force_+=force;
+}
+
+void RigidBody::update()
+{
// set the time_step for 60fps
double time_step=1.0/60.0;
-
- // a=F/m
- glm::vec2 acceleration((force_.x+force.x)/mass_, (force_.y+force.y)/mass_); // = a(t0)
- glm::vec2 intermediate_velocity=acceleration+glm::vec2(acceleration.x*time_step/2, acceleration.y*time_step/2);
+ // set the last acceleration
+ glm::vec2 last_acceleration=acceleration_;
+
+ // update the position of the body
+ center_of_mass_.x+=velocity_.x*time_step+(0.5*last_acceleration.x*time_step*time_step);
+ center_of_mass_.y+=velocity_.y*time_step+(0.5*last_acceleration.y*time_step*time_step);
+
+ // update the acceleration
+ acceleration_=glm::vec2(force_.x/mass_, force_.y/mass_);
+ glm::vec2 avg_acceleration=glm::vec2((acceleration_.x+last_acceleration.x)/2,
+ (acceleration_.y+last_acceleration.y)/2);
- velocity_=acceleration+glm::vec2(intermediate_velocity.x*time_step, intermediate_velocity.y*time_step);
+ // update the velocity of the body
+ velocity_.x+=avg_acceleration.x*time_step;
+ velocity_.y+=avg_acceleration.y*time_step;
}
} // yage