diff options
Diffstat (limited to 'src/crepe/system/PhysicsSystem.cpp')
-rw-r--r-- | src/crepe/system/PhysicsSystem.cpp | 96 |
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; } } } |