diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/CollisionTest.cpp | 100 | 
1 files changed, 100 insertions, 0 deletions
diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp new file mode 100644 index 0000000..1dfe808 --- /dev/null +++ b/src/test/CollisionTest.cpp @@ -0,0 +1,100 @@ +#include "api/BoxCollider.h" +#include "api/CircleCollider.h" +#include "api/Vector2.h" +#include <crepe/ComponentManager.h> +#include <crepe/api/Config.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/Rigidbody.h> +#include <crepe/api/Transform.h> +#include <crepe/system/PhysicsSystem.h> +#include <gtest/gtest.h> + +using namespace std; +using namespace std::chrono_literals; +using namespace crepe; + +class CollisionTest : public ::testing::Test { +protected: +	GameObject * game_object1; +	GameObject * game_object2; +	PhysicsSystem physics_system; +	void SetUp() override { +		ComponentManager & mgr = ComponentManager::get_instance(); +		std::vector<std::reference_wrapper<Transform>> transforms +			= mgr.get_components_by_id<Transform>(0); +		if (transforms.empty()) { +			double width,height,radius = 10; +			// ob 1 +			game_object1 = new GameObject(0, "", "", Vector2{0, 0}, 0, 0); +			game_object1->add_component<Rigidbody>(Rigidbody::Data{ +				.mass = 1, +				.gravity_scale = 1, +				.body_type = Rigidbody::BodyType::DYNAMIC, +				.max_linear_velocity = Vector2{10, 10}, +				.max_angular_velocity = 10, +				.constraints = {0, 0}, +				.use_gravity = true, +				.bounce = false, +			}); +			 +			game_object1->add_component<BoxCollider>(Vector2{0,0},width,height); +			game_object1->add_component<CircleCollider>(Vector2{0,0},radius); + +			//ob 2 +			game_object2 = new GameObject(0, "", "", Vector2{0, 0}, 0, 0); +			game_object2->add_component<Rigidbody>(Rigidbody::Data{ +				.mass = 1, +				.gravity_scale = 1, +				.body_type = Rigidbody::BodyType::DYNAMIC, +				.max_linear_velocity = Vector2{10, 10}, +				.max_angular_velocity = 10, +				.constraints = {0, 0}, +				.use_gravity = true, +				.bounce = false, +			}); +			game_object2->add_component<BoxCollider>(Vector2{0,0},width,height); +			game_object2->add_component<CircleCollider>(Vector2{0,0},radius); + +		} +		for (int i = 0; i < 2; i ++) { +			transforms = mgr.get_components_by_id<Transform>(i); +			Transform & transform = transforms.front().get(); +			transform.position.x = 0.0; +			transform.position.y = 0.0; +			transform.rotation = 0.0; +			std::vector<std::reference_wrapper<Rigidbody>> rigidbodies +				= mgr.get_components_by_id<Rigidbody>(i); +			Rigidbody & rigidbody = rigidbodies.front().get(); +			rigidbody.data.angular_velocity = 0; +			rigidbody.data.linear_velocity.x = 0; +			rigidbody.data.linear_velocity.y = 0; +			std::vector<std::reference_wrapper<BoxCollider>> boxcolliders +				= mgr.get_components_by_id<BoxCollider>(i); +			BoxCollider & box_collider = boxcolliders.front().get(); +			box_collider.offset = {0,0}; +			box_collider.width = 10; +			box_collider.height = 10; +			std::vector<std::reference_wrapper<CircleCollider>> circlecolliders +				= mgr.get_components_by_id<CircleCollider>(i); +			CircleCollider & circle_collider = circlecolliders.front().get(); +			circle_collider.offset = {0,0}; +			circle_collider.radius = 10; +		} +		 +	} +}; + +TEST_F(CollisionTest, box_box_collision) { +	Config::get_instance().physics.gravity = 1; +	ComponentManager & mgr = ComponentManager::get_instance(); +	std::vector<std::reference_wrapper<Transform>> transforms +		= mgr.get_components_by_id<Transform>(0); +	const Transform & transform = transforms.front().get(); +	ASSERT_FALSE(transforms.empty()); +	EXPECT_EQ(transform.position.y, 0); +	physics_system.update(); +	EXPECT_EQ(transform.position.y, 1); +	physics_system.update(); +	EXPECT_EQ(transform.position.y, 3); +} +  |