diff options
| author | JAROWMR <jarorutjes07@gmail.com> | 2024-11-22 15:14:29 +0100 | 
|---|---|---|
| committer | JAROWMR <jarorutjes07@gmail.com> | 2024-11-22 15:14:29 +0100 | 
| commit | 2c2855b77a8a1a6e21a26fea5c5735dfbbc6066d (patch) | |
| tree | 23452c82366410397ab6fd9f459bec33b3c73637 | |
| parent | 3c7fada86fd4145f2f9ca4f7af4bbacb6ebc6f65 (diff) | |
fixed merge master
| -rw-r--r-- | src/crepe/Collider.h | 8 | ||||
| -rw-r--r-- | src/crepe/system/CollisionSystem.cpp | 34 | ||||
| -rw-r--r-- | src/crepe/system/CollisionSystem.h | 3 | 
3 files changed, 19 insertions, 26 deletions
| diff --git a/src/crepe/Collider.h b/src/crepe/Collider.h index 78e48cf..0157324 100644 --- a/src/crepe/Collider.h +++ b/src/crepe/Collider.h @@ -10,14 +10,6 @@ class Collider : public Component {  public:  	Collider(game_object_id_t id, Vector2 offset); -protected: -    // Friend class allowing access to copy constructor -    friend class CollisionSystem; - -    // Copy Constructor (Restricted to CollisionSystem) -    Collider(const Collider &other) -        : Component(other.game_object_id), offset(other.offset) {} -  public:  	//! Offset of the collider relative to rigidbody position   	Vector2 offset; diff --git a/src/crepe/system/CollisionSystem.cpp b/src/crepe/system/CollisionSystem.cpp index b23e779..9ca8b3a 100644 --- a/src/crepe/system/CollisionSystem.cpp +++ b/src/crepe/system/CollisionSystem.cpp @@ -42,12 +42,12 @@ void CollisionSystem::collision_handler(CollidedInfoStor& data1,CollidedInfoStor  	Vector2 move_back;  	// Check collision type and get values for handler -	if (std::holds_alternative<BoxCollider>(data1.collider)) { -		if (std::holds_alternative<BoxCollider>(data2.collider)) { +	if (std::holds_alternative<std::reference_wrapper<BoxCollider>>(data1.collider)) { +		if (std::holds_alternative<std::reference_wrapper<BoxCollider>>(data2.collider)) {  			// Get colliders from variant to be used to determine collision handler info -			const BoxCollider& box_collider1 = std::get<BoxCollider>(data1.collider); -			const BoxCollider& box_collider2 = std::get<BoxCollider>(data2.collider); +			const BoxCollider& box_collider1 = std::get<std::reference_wrapper<BoxCollider>>(data1.collider).get(); +			const BoxCollider& box_collider2 = std::get<std::reference_wrapper<BoxCollider>>(data2.collider).get();  			collider1 = &box_collider1;  			collider2 = &box_collider2; @@ -62,24 +62,24 @@ void CollisionSystem::collision_handler(CollidedInfoStor& data1,CollidedInfoStor  		}  		else {  			// TODO: calcualte Box - Circle collision info -			const BoxCollider& box_collider = std::get<BoxCollider>(data1.collider); -			const CircleCollider& circle_collider = std::get<CircleCollider>(data2.collider); +			const BoxCollider& box_collider = std::get<std::reference_wrapper<BoxCollider>>(data1.collider).get(); +			const CircleCollider& circle_collider = std::get<std::reference_wrapper<CircleCollider>>(data2.collider).get();  			collider1 = &box_collider;  			collider2 = &circle_collider;  		}  	}  	else { -		if (std::holds_alternative<CircleCollider>(data2.collider)) { +		if (std::holds_alternative<std::reference_wrapper<CircleCollider>>(data2.collider)) {  			// TODO: calcualte Circle - Circle collision info -			const CircleCollider& circle_collider1 = std::get<CircleCollider>(data1.collider); -			const CircleCollider& circle_collider2 = std::get<CircleCollider>(data2.collider); +			const CircleCollider& circle_collider1 = std::get<std::reference_wrapper<CircleCollider>>(data1.collider).get(); +			const CircleCollider& circle_collider2 = std::get<std::reference_wrapper<CircleCollider>>(data2.collider).get();  			collider1 = &circle_collider1;  			collider2 = &circle_collider2;  		}  		else {  			// TODO: calcualte Circle - Box collision info -			const CircleCollider& circle_collider = std::get<CircleCollider>(data1.collider); -			const BoxCollider& box_collider = std::get<BoxCollider>(data2.collider); +			const CircleCollider& circle_collider = std::get<std::reference_wrapper<CircleCollider>>(data1.collider); +			const BoxCollider& box_collider = std::get<std::reference_wrapper<BoxCollider>>(data2.collider);  			collider1 = &circle_collider;  			collider2 = &box_collider;  		} @@ -222,8 +222,8 @@ std::vector<std::pair<CollisionSystem::CollidedInfoStor,CollisionSystem::Collide  			// Check collision  			if (check_box_box_collision(boxcolliders[i], boxcolliders[j], transform1, transform2, rigidbody1, rigidbody2)) {  				collisions_ret.emplace_back(std::make_pair( -				CollidedInfoStor{boxcolliders[i], transform1, rigidbody1},  -				CollidedInfoStor{boxcolliders[j], transform2, rigidbody2} +				CollidedInfoStor{boxcolliders[i].get(), transform1, rigidbody1},  +				CollidedInfoStor{boxcolliders[j].get(), transform2, rigidbody2}  				));  			}  		} @@ -245,8 +245,8 @@ std::vector<std::pair<CollisionSystem::CollidedInfoStor,CollisionSystem::Collide  			if (check_box_circle_collision(boxcolliders[i], circlecolliders[j], transform1, transform2, rigidbody1, rigidbody2)) {  				collisions_ret.emplace_back(std::make_pair( -				CollidedInfoStor{boxcolliders[i], transform1, rigidbody1},  -				CollidedInfoStor{circlecolliders[j], transform2, rigidbody2} +				CollidedInfoStor{boxcolliders[i].get(), transform1, rigidbody1},  +				CollidedInfoStor{circlecolliders[j].get(), transform2, rigidbody2}  				));  			}  		} @@ -276,8 +276,8 @@ std::vector<std::pair<CollisionSystem::CollidedInfoStor,CollisionSystem::Collide  			// Check collision  			if (check_circle_circle_collision(circlecolliders[i], circlecolliders[j], transform1, transform2, rigidbody1, rigidbody2)) {  				collisions_ret.emplace_back(std::make_pair( -				CollidedInfoStor{circlecolliders[i], transform1, rigidbody1},  -				CollidedInfoStor{circlecolliders[j], transform2, rigidbody2} +				CollidedInfoStor{circlecolliders[i].get(), transform1, rigidbody1},  +				CollidedInfoStor{circlecolliders[j].get(), transform2, rigidbody2}  				));  			}  		} diff --git a/src/crepe/system/CollisionSystem.h b/src/crepe/system/CollisionSystem.h index d94f6bc..69d1d23 100644 --- a/src/crepe/system/CollisionSystem.h +++ b/src/crepe/system/CollisionSystem.h @@ -22,7 +22,8 @@ public:  private:  	//! A variant type that can hold either a BoxCollider or a CircleCollider. -	using collider_stor = std::variant<BoxCollider, CircleCollider>; +	// using collider_stor = std::variant<BoxCollider, CircleCollider>; +	using collider_stor = std::variant<std::reference_wrapper<BoxCollider>, std::reference_wrapper<CircleCollider>>;  	/**  		* \brief A structure to store the collision data of a single collider. |