From 529e55a28a7e51bf3dd0f08fa9d6f0192445a7b4 Mon Sep 17 00:00:00 2001
From: JAROWMR <jarorutjes07@gmail.com>
Date: Sat, 7 Dec 2024 19:26:12 +0100
Subject: fixed transform

---
 src/crepe/api/LoopManager.cpp      |   8 +--
 src/crepe/system/PhysicsSystem.cpp | 112 ++++++++++++++++++-------------------
 2 files changed, 59 insertions(+), 61 deletions(-)

(limited to 'src/crepe')

diff --git a/src/crepe/api/LoopManager.cpp b/src/crepe/api/LoopManager.cpp
index fec9f51..0c1caaa 100644
--- a/src/crepe/api/LoopManager.cpp
+++ b/src/crepe/api/LoopManager.cpp
@@ -37,10 +37,10 @@ void LoopManager::fixed_update() {
 	// TODO: retrieve EventManager from direct member after singleton refactor
 	EventManager & ev = this->mediator.event_manager;
 	ev.dispatch_events();
-	this->get_system<ScriptSystem>().update();
-	this->get_system<AISystem>().update();
-	this->get_system<PhysicsSystem>().update();
-	this->get_system<CollisionSystem>().update();
+	this->get_system<ScriptSystem>().update(); // past velocity en locatie aan.
+	this->get_system<AISystem>().update(); // past velocity aan (2x) maxforce 
+	this->get_system<PhysicsSystem>().update(); // past velocity aan en locatie
+	this->get_system<CollisionSystem>().update(); // past velocity aan en locate
 }
 
 void LoopManager::loop() {
diff --git a/src/crepe/system/PhysicsSystem.cpp b/src/crepe/system/PhysicsSystem.cpp
index ab77b35..7e66567 100644
--- a/src/crepe/system/PhysicsSystem.cpp
+++ b/src/crepe/system/PhysicsSystem.cpp
@@ -14,76 +14,74 @@ void PhysicsSystem::update() {
 	double dt = LoopTimer::get_instance().get_delta_time();
 	ComponentManager & mgr = this->mediator.component_manager;
 	RefVector<Rigidbody> rigidbodies = mgr.get_components_by_type<Rigidbody>();
-	RefVector<Transform> transforms = mgr.get_components_by_type<Transform>();
+	
 
 	float gravity = Config::get_instance().physics.gravity;
 	for (Rigidbody & rigidbody : rigidbodies) {
 		if (!rigidbody.active) continue;
+		Transform & transform = mgr.get_components_by_id<Transform>(rigidbody.game_object_id).front().get();
 
 		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.gravity_scale > 0) {
-							rigidbody.data.linear_velocity.y
-								+= (rigidbody.data.mass * rigidbody.data.gravity_scale
-									* gravity * dt);
-						}
-						// Add coefficient rotation
-						if (rigidbody.data.angular_velocity_coefficient > 0) {
-							rigidbody.data.angular_velocity
-								*= std::pow(rigidbody.data.angular_velocity_coefficient, dt);
-								
-						}
+				if (transform.game_object_id == rigidbody.game_object_id) {
+					// Add gravity
+					if (rigidbody.data.gravity_scale > 0) {
+						rigidbody.data.linear_velocity.y
+							+= (rigidbody.data.mass * rigidbody.data.gravity_scale
+								* gravity * dt);
+					}
+					// Add coefficient rotation
+					if (rigidbody.data.angular_velocity_coefficient > 0) {
+						rigidbody.data.angular_velocity
+							*= std::pow(rigidbody.data.angular_velocity_coefficient, dt);
+							
+					}
 
-						// Add coefficient movement horizontal
-						if (rigidbody.data.linear_velocity_coefficient.x > 0)
-						{
-							rigidbody.data.linear_velocity.x
-									*= std::pow(rigidbody.data.linear_velocity_coefficient.x, dt);
-						}
+					// Add coefficient movement horizontal
+					if (rigidbody.data.linear_velocity_coefficient.x > 0)
+					{
+						rigidbody.data.linear_velocity.x
+								*= std::pow(rigidbody.data.linear_velocity_coefficient.x, dt);
+					}
 
-						// Add coefficient movement horizontal
-						if (rigidbody.data.linear_velocity_coefficient.y > 0)
-						{
-							rigidbody.data.linear_velocity.y
-									*= std::pow(rigidbody.data.linear_velocity_coefficient.y, dt);
-						}
+					// Add coefficient movement horizontal
+					if (rigidbody.data.linear_velocity_coefficient.y > 0)
+					{
+						rigidbody.data.linear_velocity.y
+								*= std::pow(rigidbody.data.linear_velocity_coefficient.y, dt);
+					}
 
-						// 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;
-						}
-						
-						// Set max velocity to maximum length
-						if(rigidbody.data.linear_velocity.length() > rigidbody.data.max_linear_velocity) {
-							rigidbody.data.linear_velocity.normalize();
-							rigidbody.data.linear_velocity *= rigidbody.data.max_linear_velocity;
-						}
+					// 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;
+					}
+					
+					// Set max velocity to maximum length
+					if(rigidbody.data.linear_velocity.length() > rigidbody.data.max_linear_velocity) {
+						rigidbody.data.linear_velocity.normalize();
+						rigidbody.data.linear_velocity *= rigidbody.data.max_linear_velocity;
+					}
 
-						// Move object
-						if (!rigidbody.data.constraints.rotation) {
-							transform.rotation += rigidbody.data.angular_velocity * dt;
-							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 * dt;
-						}
-						if (!rigidbody.data.constraints.y) {
-							transform.position.y += rigidbody.data.linear_velocity.y * dt;
+					// Move object
+					if (!rigidbody.data.constraints.rotation) {
+						transform.rotation += rigidbody.data.angular_velocity * dt;
+						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 * dt;
+					}
+					if (!rigidbody.data.constraints.y) {
+						transform.position.y += rigidbody.data.linear_velocity.y * dt;
+					}
 				}
 				break;
 			case Rigidbody::BodyType::KINEMATIC:
-- 
cgit v1.2.3