diff options
author | JAROWMR <jarorutjes07@gmail.com> | 2024-11-22 21:57:27 +0100 |
---|---|---|
committer | JAROWMR <jarorutjes07@gmail.com> | 2024-11-22 21:57:27 +0100 |
commit | 838613df6103ce2faaae2145ab942b75a8501779 (patch) | |
tree | 0e83380545e9bccef1d02bd22ea4fc9e0318cd0f /src/test/CollisionTest.cpp | |
parent | 2a37965c797e1ef03ec10ea8bf503d7605465f11 (diff) |
fixed tiny bugs in system
Diffstat (limited to 'src/test/CollisionTest.cpp')
-rw-r--r-- | src/test/CollisionTest.cpp | 358 |
1 files changed, 187 insertions, 171 deletions
diff --git a/src/test/CollisionTest.cpp b/src/test/CollisionTest.cpp index bbf6348..e158d5c 100644 --- a/src/test/CollisionTest.cpp +++ b/src/test/CollisionTest.cpp @@ -22,6 +22,22 @@ using namespace std::chrono_literals; using namespace crepe; using namespace testing; +// class MyScript : public Script { +// bool oncollision(const CollisionEvent& test) { +// Log::logf("Box {} script on_collision()", test.info.first.collider.game_object_id); +// return true; +// } +// void init() { +// subscribe<CollisionEvent>([this](const CollisionEvent& ev) -> bool { +// return this->oncollision(ev); +// }); +// } +// void update() { +// // Retrieve component from the same GameObject this script is on +// } +// }; + + class CollisionHandler : public Script { public: int box_id; @@ -32,18 +48,18 @@ public: } bool on_collision(const CollisionEvent& ev) { - Log::logf("Box {} script on_collision()", box_id); + //Log::logf("Box {} script on_collision()", box_id); test_fn(ev); return true; } void init() { - //Log::logf("Box {} script init()", box_id); - - // TODO: this should be built into script - subscribe<CollisionEvent>([](const CollisionEvent&) -> bool { - return true; - }); + subscribe<CollisionEvent>([this](const CollisionEvent& ev) -> bool { + return this->on_collision(ev); + }); + } + void update() { + // Retrieve component from the same GameObject this script is on } }; @@ -68,10 +84,10 @@ public: .offset = {0,0}, }); // Create a box with an inner size of 10x10 units - world.add_component<BoxCollider>(Vector2{0, -100}, 100, 100); // Top - world.add_component<BoxCollider>(Vector2{0, 100}, 100, 100); // Bottom - world.add_component<BoxCollider>(Vector2{-100, 0}, 100, 100); // Left - world.add_component<BoxCollider>(Vector2{100, 0}, 100, 100); // right + world.add_component<BoxCollider>(vec2{0, -100}, 100, 100); // Top + world.add_component<BoxCollider>(vec2{0, 100}, 100, 100); // Bottom + world.add_component<BoxCollider>(vec2{-100, 0}, 100, 100); // Left + world.add_component<BoxCollider>(vec2{100, 0}, 100, 100); // right game_object1.add_component<Rigidbody>(Rigidbody::Data{ .mass = 1, @@ -84,7 +100,7 @@ public: .elastisity = 1, .offset = {0,0}, }); - game_object1.add_component<BoxCollider>(Vector2{0, 0}, 10, 10); + game_object1.add_component<BoxCollider>(vec2{0, 0}, 10, 10); BehaviorScript & script_object1 = game_object1.add_component<BehaviorScript>().set_script<CollisionHandler>(1); script_object1_ref = static_cast<CollisionHandler*>(script_object1.script.get()); ASSERT_NE(script_object1_ref, nullptr); @@ -100,7 +116,7 @@ public: .elastisity = 1, .offset = {0,0}, }); - game_object2.add_component<BoxCollider>(Vector2{0, 0}, 10, 10); + game_object2.add_component<BoxCollider>(vec2{0, 0}, 10, 10); BehaviorScript & script_object2 = game_object2.add_component<BehaviorScript>().set_script<CollisionHandler>(2); script_object2_ref = static_cast<CollisionHandler*>(script_object2.script.get()); ASSERT_NE(script_object2_ref, nullptr); @@ -110,170 +126,170 @@ public: } }; -// TEST_F(CollisionTest, collision_example) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// }; -// EXPECT_FALSE(collision_happend); -// collision_sys.update(); -// EXPECT_FALSE(collision_happend); -// } +TEST_F(CollisionTest, collision_example) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + }; + EXPECT_FALSE(collision_happend); + collision_sys.update(); + EXPECT_FALSE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_both_no_velocity) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, 10); -// EXPECT_EQ(ev.info.move_back_value.y, 10); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 10); -// EXPECT_EQ(ev.info.move_back_value.y, 10); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {50,30}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_both_no_velocity) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, 10); + EXPECT_EQ(ev.info.move_back_value.y, 10); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 10); + EXPECT_EQ(ev.info.move_back_value.y, 10); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {50,30}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_x_direction_no_velocity) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, -5); -// EXPECT_EQ(ev.info.move_back_value.y, 0); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 5); -// EXPECT_EQ(ev.info.move_back_value.y, 0); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {45,30}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_x_direction_no_velocity) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, -5); + EXPECT_EQ(ev.info.move_back_value.y, 0); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 5); + EXPECT_EQ(ev.info.move_back_value.y, 0); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {45,30}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_y_direction_no_velocity) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, 0); -// EXPECT_EQ(ev.info.move_back_value.y, -5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 0); -// EXPECT_EQ(ev.info.move_back_value.y, 5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {50,25}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_y_direction_no_velocity) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, 0); + EXPECT_EQ(ev.info.move_back_value.y, -5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 0); + EXPECT_EQ(ev.info.move_back_value.y, 5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {50,25}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_both) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, 10); -// EXPECT_EQ(ev.info.move_back_value.y, 10); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 10); -// EXPECT_EQ(ev.info.move_back_value.y, 10); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {50,30}; -// Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); -// rg1.data.linear_velocity = {10,10}; -// Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); -// rg2.data.linear_velocity = {10,10}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_both) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, 10); + EXPECT_EQ(ev.info.move_back_value.y, 10); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 10); + EXPECT_EQ(ev.info.move_back_value.y, 10); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::BOTH); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {50,30}; + Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); + rg1.data.linear_velocity = {10,10}; + Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); + rg2.data.linear_velocity = {10,10}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_x_direction) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, -5); -// EXPECT_EQ(ev.info.move_back_value.y, -5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 5); -// EXPECT_EQ(ev.info.move_back_value.y, 5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {45,30}; -// Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); -// rg1.data.linear_velocity = {10,10}; -// Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); -// rg2.data.linear_velocity = {10,10}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_x_direction) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, -5); + EXPECT_EQ(ev.info.move_back_value.y, -5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 5); + EXPECT_EQ(ev.info.move_back_value.y, 5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::X_DIRECTION); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {45,30}; + Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); + rg1.data.linear_velocity = {10,10}; + Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); + rg2.data.linear_velocity = {10,10}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} -// TEST_F(CollisionTest, collision_box_box_dynamic_y_direction) { -// bool collision_happend = false; -// script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 1); -// EXPECT_EQ(ev.info.move_back_value.x, -5); -// EXPECT_EQ(ev.info.move_back_value.y, -5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); -// }; -// script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { -// collision_happend = true; -// EXPECT_EQ(ev.info.first.collider.game_object_id, 2); -// EXPECT_EQ(ev.info.move_back_value.x, 5); -// EXPECT_EQ(ev.info.move_back_value.y, 5); -// EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); -// }; -// EXPECT_FALSE(collision_happend); -// Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); -// tf.position = {50,25}; -// Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); -// rg1.data.linear_velocity = {10,10}; -// Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); -// rg2.data.linear_velocity = {10,10}; -// collision_sys.update(); -// EXPECT_TRUE(collision_happend); -// } +TEST_F(CollisionTest, collision_box_box_dynamic_y_direction) { + bool collision_happend = false; + script_object1_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 1); + EXPECT_EQ(ev.info.move_back_value.x, -5); + EXPECT_EQ(ev.info.move_back_value.y, -5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); + }; + script_object2_ref->test_fn = [&collision_happend](const CollisionEvent & ev) { + collision_happend = true; + EXPECT_EQ(ev.info.first.collider.game_object_id, 2); + EXPECT_EQ(ev.info.move_back_value.x, 5); + EXPECT_EQ(ev.info.move_back_value.y, 5); + EXPECT_EQ(ev.info.move_back_direction, crepe::CollisionSystem::Direction::Y_DIRECTION); + }; + EXPECT_FALSE(collision_happend); + Transform & tf = this->mgr.get_components_by_id<Transform>(1).front().get(); + tf.position = {50,25}; + Rigidbody & rg1 = this->mgr.get_components_by_id<Rigidbody>(1).front().get(); + rg1.data.linear_velocity = {10,10}; + Rigidbody & rg2 = this->mgr.get_components_by_id<Rigidbody>(2).front().get(); + rg2.data.linear_velocity = {10,10}; + collision_sys.update(); + EXPECT_TRUE(collision_happend); +} TEST_F(CollisionTest, collision_box_box_static_both) { |