aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/PhysicsSystem.cpp
diff options
context:
space:
mode:
authorjaroWMR <jarorutjes07@gmail.com>2024-10-20 16:58:13 +0200
committerjaroWMR <jarorutjes07@gmail.com>2024-10-20 16:58:13 +0200
commitcead795b7ff7135e13caf9ad3b76628070391458 (patch)
treef91f5e9f6927727367324961e585d049d2947364 /src/crepe/PhysicsSystem.cpp
parentd8483cfab70b5aca3baae6e0588924da8b54e090 (diff)
added collision system and circlecollider
Diffstat (limited to 'src/crepe/PhysicsSystem.cpp')
-rw-r--r--src/crepe/PhysicsSystem.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/crepe/PhysicsSystem.cpp b/src/crepe/PhysicsSystem.cpp
index c24afa2..7d16044 100644
--- a/src/crepe/PhysicsSystem.cpp
+++ b/src/crepe/PhysicsSystem.cpp
@@ -2,6 +2,7 @@
#include "ComponentManager.h"
#include "Rigidbody.h"
#include "Transform.h"
+#include "Force.h"
#include <iostream>
using namespace crepe;
@@ -14,7 +15,41 @@ 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>();
+
for (Rigidbody& rigidbody : rigidbodies) {
- std::cout << rigidbody.gameObjectId << std::endl;
+
+ switch (rigidbody.body_type)
+ {
+ case BodyType::Dynamic :
+ for (Transform& transform : transforms) {
+ if(transform.gameObjectId == rigidbody.gameObjectId)
+ {
+ rigidbody.velocity_x = 0;
+ rigidbody.velocity_y = 0;
+ std::vector<std::reference_wrapper<Force>> Forces = mgr.get_components_by_id<Force>(rigidbody.gameObjectId);
+ rigidbody.velocity_y += rigidbody.gravity_scale * 1 * rigidbody.mass;
+
+ for (Force& force : Forces)
+ {
+ rigidbody.velocity_x += force.force_x;
+ rigidbody.velocity_y += force.force_y;
+ }
+
+ std::cout << "before transform.postion.x " << transform.postion.x << std::endl;
+ std::cout << "before transform.postion.y " << transform.postion.y << std::endl;
+ transform.postion.x += rigidbody.velocity_x;
+ transform.postion.y += rigidbody.velocity_y;
+ std::cout << "after transform.postion.x " << transform.postion.x << std::endl;
+ std::cout << "after transform.postion.y " << transform.postion.y << std::endl;
+ }
+ }
+ break;
+ case BodyType::Kinematic :
+ break; //(scripts)
+ case BodyType::Static :
+ break; //(unmoveable objects)
+ default:
+ break;
+ }
}
}