aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/system/PhysicsSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/system/PhysicsSystem.cpp')
-rw-r--r--src/crepe/system/PhysicsSystem.cpp64
1 files changed, 21 insertions, 43 deletions
diff --git a/src/crepe/system/PhysicsSystem.cpp b/src/crepe/system/PhysicsSystem.cpp
index eb54ad3..a5b6bde 100644
--- a/src/crepe/system/PhysicsSystem.cpp
+++ b/src/crepe/system/PhysicsSystem.cpp
@@ -12,10 +12,8 @@ using namespace crepe;
void PhysicsSystem::update() {
ComponentManager & mgr = ComponentManager::get_instance();
- std::vector<std::reference_wrapper<Rigidbody>> rigidbodies
- = mgr.get_components_by_type<Rigidbody>();
- std::vector<std::reference_wrapper<Transform>> transforms
- = mgr.get_components_by_type<Transform>();
+ std::vector<std::reference_wrapper<Rigidbody>> rigidbodies = mgr.get_components_by_type<Rigidbody>();
+ std::vector<std::reference_wrapper<Transform>> transforms = mgr.get_components_by_type<Transform>();
double gravity = Config::get_instance().physics.gravity;
for (Rigidbody & rigidbody : rigidbodies) {
@@ -28,68 +26,48 @@ void PhysicsSystem::update() {
// Add gravity
if (rigidbody.data.use_gravity) {
- rigidbody.data.linear_velocity.y
- += (rigidbody.data.mass
- * rigidbody.data.gravity_scale * 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;
+ rigidbody.data.angular_velocity *= rigidbody.data.angular_damping;
}
if (rigidbody.data.linear_damping != Vector2{0, 0}) {
- rigidbody.data.linear_velocity
- *= rigidbody.data.linear_damping;
+ 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);
+ 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;
+ transform.position.x += rigidbody.data.linear_velocity.x;
}
if (!rigidbody.data.constraints.y) {
- transform.position.y
- += rigidbody.data.linear_velocity.y;
+ transform.position.y += rigidbody.data.linear_velocity.y;
}
}
}