aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJAROWMR <jarorutjes07@gmail.com>2024-12-19 08:36:17 +0100
committerJAROWMR <jarorutjes07@gmail.com>2024-12-19 08:36:17 +0100
commit714edd69d53a6243e9a2b81f62d309c96b71dd8d (patch)
tree12492c1f89ac4f5d38292e671c48f78eab95879e
parent5a087d8a01d00a737ae602370c2c3514294da88d (diff)
bug fix and doxygen fix
-rw-r--r--src/crepe/system/CollisionSystem.cpp4
-rw-r--r--src/crepe/system/CollisionSystem.h66
-rw-r--r--src/example/game.cpp4
3 files changed, 38 insertions, 36 deletions
diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp
index 75e914d..719713c 100644
--- a/src/crepe/system/CollisionSystem.cpp
+++ b/src/crepe/system/CollisionSystem.cpp
@@ -407,9 +407,9 @@ CollisionSystem::CollisionInfo CollisionSystem::get_collision_info(const Collisi
// Below is for collision handling
void CollisionSystem::determine_collision_handler(const CollisionInfo & info) {
Rigidbody::BodyType self_type = info.self.rigidbody.data.body_type;
- Rigidbody::BodyType other_type = info.self.rigidbody.data.body_type;
+ Rigidbody::BodyType other_type = info.other.rigidbody.data.body_type;
bool self_kinematic = info.self.rigidbody.data.kinematic_collision;
- bool other_kinematic = info.self.rigidbody.data.kinematic_collision;
+ bool other_kinematic = info.other.rigidbody.data.kinematic_collision;
// Inverted collision info
CollisionInfo inverted = -info;
// If both objects are static skip handle call collision script
diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h
index 7792e50..13ce8f0 100644
--- a/src/crepe/system/CollisionSystem.h
+++ b/src/crepe/system/CollisionSystem.h
@@ -34,18 +34,19 @@ private:
BOTH
};
public:
- /**
- * \brief Structure representing detailed collision information between two colliders.
- *
- * Includes information about the colliding objects and the resolution data for handling the collision.
- */
-
+
+ //! Structure representing components of the collider
struct ColliderInfo {
Transform & transform;
Rigidbody & rigidbody;
Metadata & metadata;
};
+ /**
+ * \brief Structure representing detailed collision information between two colliders.
+ *
+ * Includes information about the colliding objects and the resolution data for handling the collision.
+ */
struct CollisionInfo {
ColliderInfo self;
ColliderInfo other;
@@ -86,12 +87,14 @@ private:
Direction resolution_direction = Direction::NONE;
};
+ //! Structure of collider with addtitional components
struct BoxColliderInternal {
BoxCollider & collider;
Transform & transform;
Rigidbody & rigidbody;
};
+ //! Structure of collider with addtitional components
struct CircleColliderInternal {
CircleCollider & collider;
Transform & transform;
@@ -123,9 +126,19 @@ private:
* \param data1 Collision data for the first collider.
* \param data2 Collision data for the second collider.
*/
- CollisionInfo get_collision_info(const CollisionInternal & this_data, const CollisionInternal & other_data) const; //done
+ CollisionInfo get_collision_info(const CollisionInternal & data1, const CollisionInternal & data2) const;
+ /**
+ * \brief Corrects the resolution of the collision
+ *
+ * This function corrects the resolution by fixing the x or y if it is empty.
+ * Besides this with the input of the resolution the direction is saved before correction.
+ *
+ * \param resolution resolution vector that needs to be corrected
+ * \param rigidbody rigidbody data used to correct resolution
+ * \return Direction of resolution
+ */
Direction resolution_correction(vec2 & resolution,const Rigidbody::Data & rigidbody);
@@ -136,7 +149,7 @@ private:
*
* \param info Collision information containing data about both colliders.
*/
- void determine_collision_handler(const CollisionInfo & info); //done
+ void determine_collision_handler(const CollisionInfo & info);
/**
* \brief Calls both collision script
@@ -144,6 +157,7 @@ private:
* Calls both collision script to let user add additonal handeling or handle full collision.
*
* \param info Collision information containing data about both colliders.
+ * \param info_inverted Collision information containing data about both colliders in opposite order.
*/
void call_collision_events(const CollisionInfo & info, const CollisionInfo & info_inverted);
@@ -154,7 +168,7 @@ private:
*
* \param info Collision information containing data about both colliders.
*/
- void static_collision_handler(const CollisionInfo & info); //done
+ void static_collision_handler(const CollisionInfo & info);
/**
* \brief Handles collisions involving dynamic objects.
@@ -163,7 +177,7 @@ private:
*
* \param info Collision information containing data about both colliders.
*/
- void dynamic_collision_handler(const CollisionInfo & info); //done
+ void dynamic_collision_handler(const CollisionInfo & info);
private:
/**
@@ -175,7 +189,7 @@ private:
* \return A list of collision pairs with their associated data.
*/
std::vector<std::pair<CollisionInternal, CollisionInternal>>
- gather_collisions(std::vector<CollisionInternal> & colliders); //done
+ gather_collisions(std::vector<CollisionInternal> & colliders);
/**
* \brief Checks if the settings allow collision
@@ -207,39 +221,27 @@ private:
/**
* \brief Detects collisions between two BoxColliders.
*
- * \param box1 The first BoxCollider.
- * \param box2 The second BoxCollider.
- * \param transform1 Transform of the first object.
- * \param transform2 Transform of the second object.
- * \param rigidbody1 Rigidbody of the first object.
- * \param rigidbody2 Rigidbody of the second object.
- * \return True if a collision is detected, otherwise false.
+ * \param box1 Information about the first BoxCollider.
+ * \param box2 Information about the second BoxCollider.
+ * \return returns resolution vector if collide otherwise returns {-1,-1}
*/
vec2 get_box_box_detection(const BoxColliderInternal & box1, const BoxColliderInternal & box2) const;
/**
* \brief Check collision for box on circle collider
*
- * \param box1 The BoxCollider
- * \param circle2 The CircleCollider
- * \param transform1 Transform of the first object.
- * \param transform2 Transform of the second object.
- * \param rigidbody1 Rigidbody of the first object.
- * \param rigidbody2 Rigidbody of the second object.
- * \return True if a collision is detected, otherwise false.
+ * \param box1 Information about the BoxCollider.
+ * \param circle2 Information about the circleCollider.
+ * \return returns resolution vector if collide otherwise returns {-1,-1}
*/
vec2 get_box_circle_detection(const BoxColliderInternal & box1, const CircleColliderInternal & circle2) const;
/**
* \brief Check collision for circle on circle collider
*
- * \param circle1 First CircleCollider
- * \param circle2 Second CircleCollider
- * \param transform1 Transform of the first object.
- * \param transform2 Transform of the second object.
- * \param rigidbody1 Rigidbody of the first object.
- * \param rigidbody2 Rigidbody of the second object.
- * \return True if a collision is detected, otherwise false.
+ * \param circle1 Information about the first circleCollider.
+ * \param circle2 Information about the second circleCollider.
+ * \return returns resolution vector if collide otherwise returns {-1,-1}
*
* \return status of collision
*/
diff --git a/src/example/game.cpp b/src/example/game.cpp
index 01e55d5..f931878 100644
--- a/src/example/game.cpp
+++ b/src/example/game.cpp
@@ -206,7 +206,7 @@ public:
vec2{world_collider, world_collider},
vec2{0, screen_size_height / 2 + world_collider / 2}); // Bottom
world.add_component<BoxCollider>(
- vec2{world_collider, world_collider},git stauts
+ vec2{world_collider, world_collider},
vec2{0 - (screen_size_width / 2 + world_collider / 2), 0}); // Left
world.add_component<BoxCollider>(
vec2{world_collider, world_collider},
@@ -256,7 +256,7 @@ public:
"Name", "Tag", vec2{screen_size_width / 2, screen_size_height / 2}, 0, 1);
game_object2.add_component<Rigidbody>(Rigidbody::Data{
.mass = 1,
- .gravity_scale = 1,
+ .gravity_scale = 0,
.body_type = Rigidbody::BodyType::DYNAMIC,
.linear_velocity = {0, 0},
.constraints = {0, 0, 0},