diff options
| author | JAROWMR <jarorutjes07@gmail.com> | 2024-12-07 19:26:12 +0100 | 
|---|---|---|
| committer | JAROWMR <jarorutjes07@gmail.com> | 2024-12-07 19:26:12 +0100 | 
| commit | 529e55a28a7e51bf3dd0f08fa9d6f0192445a7b4 (patch) | |
| tree | 1cfa52550f2e0d6d379a796697307ed2c872d521 /src/crepe | |
| parent | 3f4be8dd73792b8937cdba4934b8938be163ac7a (diff) | |
fixed transform
Diffstat (limited to 'src/crepe')
| -rw-r--r-- | src/crepe/api/LoopManager.cpp | 8 | ||||
| -rw-r--r-- | src/crepe/system/PhysicsSystem.cpp | 112 | 
2 files changed, 59 insertions, 61 deletions
| 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: |