aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/system
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/system')
-rw-r--r--src/crepe/system/PhysicsSystem.cpp96
1 files changed, 51 insertions, 45 deletions
diff --git a/src/crepe/system/PhysicsSystem.cpp b/src/crepe/system/PhysicsSystem.cpp
index 1a323ee..1bd2171 100644
--- a/src/crepe/system/PhysicsSystem.cpp
+++ b/src/crepe/system/PhysicsSystem.cpp
@@ -1,10 +1,10 @@
#include <cmath>
#include "../ComponentManager.h"
+#include "../api/Config.h"
#include "../api/Rigidbody.h"
#include "../api/Transform.h"
#include "../api/Vector2.h"
-#include "../api/Config.h"
#include "PhysicsSystem.h"
@@ -19,71 +19,77 @@ void PhysicsSystem::update() {
double gravity = Config::get_instance().physics.gravity;
for (Rigidbody & rigidbody : rigidbodies) {
- if(!rigidbody.active){continue;}
+ if (!rigidbody.active) continue;
+
switch (rigidbody.data.body_type) {
case Rigidbody::BodyType::DYNAMIC:
for (Transform & transform : transforms) {
if (transform.game_object_id == rigidbody.game_object_id) {
-
- // Add gravity
- if(rigidbody.data.use_gravity)
- {
- rigidbody.data.linear_velocity.y += (rigidbody.data.mass * rigidbody.data.gravity_scale * gravity);
+
+ // Add gravity
+ if (rigidbody.data.use_gravity) {
+ rigidbody.data.linear_velocity.y
+ += (rigidbody.data.mass
+ * rigidbody.data.gravity_scale * gravity);
}
// Add damping
- if(rigidbody.data.angular_damping != 0)
- {
- rigidbody.data.angular_velocity *= rigidbody.data.angular_damping;
+ if (rigidbody.data.angular_damping != 0) {
+ rigidbody.data.angular_velocity
+ *= rigidbody.data.angular_damping;
}
- if(rigidbody.data.linear_damping != Vector2{0,0})
- {
- rigidbody.data.linear_velocity *= rigidbody.data.linear_damping;
+ if (rigidbody.data.linear_damping != Vector2{0, 0}) {
+ rigidbody.data.linear_velocity
+ *= rigidbody.data.linear_damping;
}
// Max velocity check
- if(rigidbody.data.angular_velocity > rigidbody.data.max_angular_velocity)
- {
- rigidbody.data.angular_velocity = rigidbody.data.max_angular_velocity;
- }
- else if (rigidbody.data.angular_velocity < -rigidbody.data.max_angular_velocity)
- {
- rigidbody.data.angular_velocity = -rigidbody.data.max_angular_velocity;
+ if (rigidbody.data.angular_velocity
+ > rigidbody.data.max_angular_velocity) {
+ rigidbody.data.angular_velocity
+ = rigidbody.data.max_angular_velocity;
+ } else if (rigidbody.data.angular_velocity
+ < -rigidbody.data.max_angular_velocity) {
+ rigidbody.data.angular_velocity
+ = -rigidbody.data.max_angular_velocity;
}
- if(rigidbody.data.linear_velocity.x > rigidbody.data.max_linear_velocity.x)
- {
- rigidbody.data.linear_velocity.x = rigidbody.data.max_linear_velocity.x;
- }
- else if(rigidbody.data.linear_velocity.x < -rigidbody.data.max_linear_velocity.x)
- {
- rigidbody.data.linear_velocity.x = -rigidbody.data.max_linear_velocity.x;
+ if (rigidbody.data.linear_velocity.x
+ > rigidbody.data.max_linear_velocity.x) {
+ rigidbody.data.linear_velocity.x
+ = rigidbody.data.max_linear_velocity.x;
+ } else if (rigidbody.data.linear_velocity.x
+ < -rigidbody.data.max_linear_velocity.x) {
+ rigidbody.data.linear_velocity.x
+ = -rigidbody.data.max_linear_velocity.x;
}
- if(rigidbody.data.linear_velocity.y > rigidbody.data.max_linear_velocity.y)
- {
- rigidbody.data.linear_velocity.y = rigidbody.data.max_linear_velocity.y;
- }
- else if(rigidbody.data.linear_velocity.y < -rigidbody.data.max_linear_velocity.y)
- {
- rigidbody.data.linear_velocity.y = -rigidbody.data.max_linear_velocity.y;
+ if (rigidbody.data.linear_velocity.y
+ > rigidbody.data.max_linear_velocity.y) {
+ rigidbody.data.linear_velocity.y
+ = rigidbody.data.max_linear_velocity.y;
+ } else if (rigidbody.data.linear_velocity.y
+ < -rigidbody.data.max_linear_velocity.y) {
+ rigidbody.data.linear_velocity.y
+ = -rigidbody.data.max_linear_velocity.y;
}
- // Move object
- if(!rigidbody.data.constraints.rotation)
- {
- transform.rotation += rigidbody.data.angular_velocity;
- transform.rotation = std::fmod(transform.rotation, 360.0);
+ // Move object
+ if (!rigidbody.data.constraints.rotation) {
+ transform.rotation
+ += rigidbody.data.angular_velocity;
+ transform.rotation
+ = std::fmod(transform.rotation, 360.0);
if (transform.rotation < 0) {
transform.rotation += 360.0;
}
}
- if(!rigidbody.data.constraints.x)
- {
- transform.position.x += rigidbody.data.linear_velocity.x;
+ if (!rigidbody.data.constraints.x) {
+ transform.position.x
+ += rigidbody.data.linear_velocity.x;
}
- if(!rigidbody.data.constraints.y)
- {
- transform.position.y += rigidbody.data.linear_velocity.y;
+ if (!rigidbody.data.constraints.y) {
+ transform.position.y
+ += rigidbody.data.linear_velocity.y;
}
}
}