#include #include #include enum class my_entity : entt::id_type {}; TEST(Example, EntityCopy) { using namespace entt::literals; entt::registry registry{}; auto &&custom = registry.storage("custom"_hs); const auto src = registry.create(); const auto dst = registry.create(); const auto other = registry.create(); custom.emplace(src, 1.); registry.emplace(src, 42); registry.emplace(src, 'c'); registry.emplace(other, 3.); ASSERT_TRUE(custom.contains(src)); ASSERT_FALSE(registry.all_of(src)); ASSERT_TRUE((registry.all_of(src))); ASSERT_FALSE((registry.any_of(dst))); ASSERT_FALSE(custom.contains(dst)); for(auto [id, storage]: registry.storage()) { // discard the custom storage because why not, this is just an example after all if(id != "custom"_hs && storage.contains(src)) { storage.emplace(dst, storage.get(src)); } } ASSERT_TRUE((registry.all_of(dst))); ASSERT_FALSE((registry.all_of(dst))); ASSERT_FALSE(custom.contains(dst)); ASSERT_EQ(registry.get(dst), 42); ASSERT_EQ(registry.get(dst), 'c'); } TEST(Example, DifferentRegistryTypes) { using namespace entt::literals; entt::basic_registry registry{}; entt::basic_registry other{}; static_cast(registry.storage()); static_cast(other.storage()); const auto src = registry.create(); const auto dst = other.create(); registry.emplace(src, 42); registry.emplace(src, 'c'); for(auto [id, storage]: registry.storage()) { if(auto it = other.storage(id); it != other.storage().end() && storage.contains(src)) { it->second.emplace(dst, storage.get(src)); } } ASSERT_TRUE((registry.all_of(src))); ASSERT_FALSE(other.all_of(dst)); ASSERT_TRUE(other.all_of(dst)); ASSERT_EQ(other.get(dst), 42); }