#include #include #include #include "TestActor.h" #include "Game/World/World.hpp" #include "TestWorld.h" #include "Core/CoreInstance.hpp" #include "Game/GameInstance.hpp" #include "Game/SaveMap/SaveMap.hpp" TestWorld::TestWorld(GameInstance& game_instance) : World(game_instance) { } std::shared_ptr TestWorld::save() { std::shared_ptr save = std::make_shared("TestWorld"); save->connect_to(World::save()); return save; } void TestWorld::load(std::shared_ptr save) { World::load(save->getParent()); } TEST(World, check_load) { const std::string main_config = R"({ "Class name":"MainConfig", "dmin_memory_size":4096.0, "imin_CPU_count":1, "sgame_name":"tests", "sbase_world":"tests" })"; std::ofstream main_config_file("main_config.conf"); main_config_file << main_config; main_config_file.close(); const std::string world_config = R"( { "Class name": "TestWorld", "Parent parameters": { "Class name": "World", "vsActorsIDs": [ "TempActor" ], "loActors": [ { "Class name": "Actor", "oloc": { "Class name": "Vector3D", "dx": 1, "dy": -1, "dz": 1 }, "orot": { "Class name": "Vector3D", "dx": 0, "dy": 0, "dz": 0 }, "oscale": { "Class name": "Vector3D", "dx": 1, "dy": 1, "dz": 1 }, "lstags": [] } ] } } )"; std::filesystem::create_directories("Worlds"); std::ofstream world_file("Worlds/tests.world"); world_file << world_config; world_file.close(); CoreInstance tmp_core; tmp_core.GetGameInstance()->GetWorld()->SpawnActorFormClass("Test"); std::vector> actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass(); ASSERT_EQ(actors.size(), 2); try { std::filesystem::remove("main_config.conf"); } catch (...) {} try { std::filesystem::remove("Worlds/tests.world"); } catch (...) {} try { std::filesystem::remove("Worlds"); } catch (...) {} } TEST(World, check_finders) { const std::string main_config = R"({ "Class name":"MainConfig", "dmin_memory_size":4096.0, "imin_CPU_count":1, "sgame_name":"tests", "sbase_world":"tests" })"; std::ofstream main_config_file("main_config.conf"); main_config_file << main_config; main_config_file.close(); const std::string world_config = R"( { "Class name": "TestWorld", "Parent parameters": { "Class name": "World", "vsActorsIDs": [ "TempActor1", "TempActor2" ], "loActors": [ { "Class name": "TestActor", "Parent parameters":{ "Class name": "Actor", "oloc": { "Class name": "Vector3D", "dx": 1, "dy": -1, "dz": 1 }, "orot": { "Class name": "Vector3D", "dx": 0, "dy": 0, "dz": 0 }, "oscale": { "Class name": "Vector3D", "dx": 1, "dy": 1, "dz": 1 }, "lstags": [] } }, { "Class name": "Actor", "oloc": { "Class name": "Vector3D", "dx": 1, "dy": -1, "dz": 1 }, "orot": { "Class name": "Vector3D", "dx": 0, "dy": 0, "dz": 0 }, "oscale": { "Class name": "Vector3D", "dx": 1, "dy": 1, "dz": 1 }, "lstags": ["Simple"] } ] } } )"; std::filesystem::create_directories("Worlds"); std::ofstream world_file("Worlds/tests.world"); world_file << world_config; world_file.close(); CoreInstance tmp_core; // Test find by class std::list> test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass(); ASSERT_EQ(test_actors.size(), 1); // Test find by tag std::vector> actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByTag("Simple"); ASSERT_EQ(actors.size(), 1); // Test find by name std::weak_ptr actor_by_name = tmp_core.GetGameInstance()->GetWorld()->GetActorByName("TempActor2"); ASSERT_EQ(actor_by_name.expired(), false); ASSERT_EQ(*actor_by_name.lock()->GetTags().begin(), "Simple"); try { std::filesystem::remove("main_config.conf"); } catch (...) {} try { std::filesystem::remove("Worlds/tests.world"); } catch (...) {} try { std::filesystem::remove("Worlds"); } catch (...) {} } TEST(World, check_spawn_actor_from_class) { const std::string main_config = R"({ "Class name":"MainConfig", "dmin_memory_size":4096.0, "imin_CPU_count":1, "sgame_name":"tests", "sbase_world":"tests" })"; std::ofstream main_config_file("main_config.conf"); main_config_file << main_config; main_config_file.close(); const std::string world_config = R"( { "Class name": "TestWorld", "Parent parameters": { "Class name": "World", "vsActorsIDs": [ ], "loActors": [ ] } } )"; std::filesystem::create_directories("Worlds"); std::ofstream world_file("Worlds/tests.world"); world_file << world_config; world_file.close(); CoreInstance tmp_core; std::vector> test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass(); ASSERT_EQ(test_actors.size(), 0); tmp_core.GetGameInstance()->GetWorld()->SpawnActorFormClass("Test"); test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass(); ASSERT_EQ(test_actors.size(), 1); try { std::filesystem::remove("main_config.conf"); } catch (...) {} try { std::filesystem::remove("Worlds/tests.world"); } catch (...) {} try { std::filesystem::remove("Worlds"); } catch (...) {} }