diff options
author | JAROWMR <jarorutjes07@gmail.com> | 2024-12-19 18:37:21 +0100 |
---|---|---|
committer | JAROWMR <jarorutjes07@gmail.com> | 2024-12-19 18:37:21 +0100 |
commit | ac692aa8207fb2dcc059e7761098cd98749154a0 (patch) | |
tree | 84ac034c8a81261f6e1e631d1e6cc54013b7b8d8 /src | |
parent | 3a5d4c67dba2edd54a5c888432a8d794d152255e (diff) |
added some comments
Diffstat (limited to 'src')
-rw-r--r-- | src/crepe/system/CollisionSystem.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp index a8e6181..c9c5c58 100644 --- a/src/crepe/system/CollisionSystem.cpp +++ b/src/crepe/system/CollisionSystem.cpp @@ -156,6 +156,7 @@ bool CollisionSystem::detect_collision(CollisionInternal & self,CollisionInterna vec2 resolution; switch (type) { case CollisionInternalType::BOX_BOX: { + // Box-Box collision detection const BoxColliderInternal BOX1 = { .collider = std::get<std::reference_wrapper<BoxCollider>>(self.collider), .transform = self.info.transform, @@ -166,12 +167,15 @@ bool CollisionSystem::detect_collision(CollisionInternal & self,CollisionInterna .transform = other.info.transform, .rigidbody = other.info.rigidbody }; + // Get resolution vector from box-box collision detection resolution = this->get_box_box_detection(BOX1, BOX2); + // If no collision (NaN values), return false if(std::isnan(resolution.x) && std::isnan(resolution.y)) return false; break; } case CollisionInternalType::BOX_CIRCLE: { + // Box-Circle collision detection const BoxColliderInternal BOX1 = { .collider = std::get<std::reference_wrapper<BoxCollider>>(self.collider), .transform = self.info.transform, @@ -182,12 +186,16 @@ bool CollisionSystem::detect_collision(CollisionInternal & self,CollisionInterna .transform = other.info.transform, .rigidbody = other.info.rigidbody }; + // Get resolution vector from box-circle collision detection resolution = this->get_box_circle_detection(BOX1, CIRCLE2); + // If no collision (NaN values), return false if(std::isnan(resolution.x) && std::isnan(resolution.y)) return false; + // Invert the resolution vector for proper collision response resolution = -resolution; break; } case CollisionInternalType::CIRCLE_CIRCLE: { + // Circle-Circle collision detection const CircleColliderInternal CIRCLE1 = { .collider = std::get<std::reference_wrapper<CircleCollider>>(self.collider), .transform = self.info.transform, @@ -198,11 +206,14 @@ bool CollisionSystem::detect_collision(CollisionInternal & self,CollisionInterna .transform = other.info.transform, .rigidbody = other.info.rigidbody }; + // Get resolution vector from circle-circle collision detection resolution = this->get_circle_circle_detection(CIRCLE1,CIRCLE2); + // If no collision (NaN values), return false if(std::isnan(resolution.x) && std::isnan(resolution.y)) return false; break; } case CollisionInternalType::CIRCLE_BOX: { + // Circle-Box collision detection const CircleColliderInternal CIRCLE1 = { .collider = std::get<std::reference_wrapper<CircleCollider>>(self.collider), .transform = self.info.transform, @@ -213,17 +224,26 @@ bool CollisionSystem::detect_collision(CollisionInternal & self,CollisionInterna .transform = other.info.transform, .rigidbody = other.info.rigidbody }; + // Get resolution vector from box-circle collision detection (order swapped) resolution = this->get_box_circle_detection(BOX2, CIRCLE1); + // If no collision (NaN values), return false if(std::isnan(resolution.x) && std::isnan(resolution.y)) return false; break; } case CollisionInternalType::NONE: - break; + // No collision detection needed if the type is NONE + return false; + break; } + // Store the calculated resolution vector for the 'self' collider self.resolution = resolution; + // Calculate the resolution direction based on the rigidbody data self.resolution_direction = this->resolution_correction(self.resolution, self.info.rigidbody.data); + // For the 'other' collider, the resolution is the opposite direction of 'self' other.resolution = -self.resolution; other.resolution_direction = self.resolution_direction; + + // Return true if a collision was detected and resolution was calculated return true; } |