Remove multiple components at once
This commit is contained in:
parent
6861e87c61
commit
8df572aadb
2 changed files with 22 additions and 7 deletions
|
@ -177,8 +177,10 @@ TEST_CASE("Attach multiple components to an entity and verify all are correctly
|
||||||
REQUIRE(e.has<ChoosenOne, Name>());
|
REQUIRE(e.has<ChoosenOne, Name>());
|
||||||
REQUIRE(w.has<ChoosenOne, Name>(e));
|
REQUIRE(w.has<ChoosenOne, Name>(e));
|
||||||
|
|
||||||
e.remove<ChoosenOne>();
|
e.remove<ChoosenOne, Name>();
|
||||||
|
|
||||||
REQUIRE_FALSE(e.has<ChoosenOne, Name>());
|
REQUIRE_FALSE(e.has<ChoosenOne, Name>());
|
||||||
REQUIRE_FALSE(w.has<ChoosenOne, Name>(e));
|
REQUIRE_FALSE(w.has<ChoosenOne, Name>(e));
|
||||||
|
REQUIRE_FALSE(e.has<ChoosenOne>());
|
||||||
|
REQUIRE_FALSE(e.has<Name>());
|
||||||
}
|
}
|
||||||
|
|
25
zecsy.hpp
25
zecsy.hpp
|
@ -39,7 +39,7 @@ namespace zecsy
|
||||||
template<typename... T>
|
template<typename... T>
|
||||||
void set(const T&... comps);
|
void set(const T&... comps);
|
||||||
|
|
||||||
template<typename T>
|
template<typename... T>
|
||||||
void remove();
|
void remove();
|
||||||
private:
|
private:
|
||||||
entity_id id = 0;
|
entity_id id = 0;
|
||||||
|
@ -78,6 +78,10 @@ namespace zecsy
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void remove(entity_id e);
|
void remove(entity_id e);
|
||||||
|
|
||||||
|
template<typename First, typename Second, typename... Rest>
|
||||||
|
requires(sizeof...(Rest) >= 0)
|
||||||
|
void remove(entity_id e);
|
||||||
private:
|
private:
|
||||||
using comp_index = std::type_index;
|
using comp_index = std::type_index;
|
||||||
using comp_to_bitset = std::unordered_map<comp_index, zecsy_bits>;
|
using comp_to_bitset = std::unordered_map<comp_index, zecsy_bits>;
|
||||||
|
@ -117,7 +121,7 @@ namespace zecsy
|
||||||
template<typename... T>
|
template<typename... T>
|
||||||
void set(entity_id e, const T&... comps);
|
void set(entity_id e, const T&... comps);
|
||||||
|
|
||||||
template<typename T>
|
template<typename... T>
|
||||||
void remove(entity_id e);
|
void remove(entity_id e);
|
||||||
private:
|
private:
|
||||||
zecsy_bits entities_bitset;
|
zecsy_bits entities_bitset;
|
||||||
|
@ -277,16 +281,16 @@ namespace zecsy
|
||||||
entity_dict[typeid(T)].erase(e);
|
entity_dict[typeid(T)].erase(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename... T>
|
||||||
inline void world::remove(entity_id e)
|
inline void world::remove(entity_id e)
|
||||||
{
|
{
|
||||||
storage.remove<T>(e);
|
storage.remove<T...>(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename... T>
|
||||||
inline void entity::remove()
|
inline void entity::remove()
|
||||||
{
|
{
|
||||||
w->remove<T>(id);
|
w->remove<T...>(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename... T>
|
template<typename... T>
|
||||||
|
@ -320,4 +324,13 @@ namespace zecsy
|
||||||
set(e, comp1);
|
set(e, comp1);
|
||||||
(set(e, rest_comps), ...);
|
(set(e, rest_comps), ...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename First, typename Second, typename... Rest>
|
||||||
|
requires(sizeof...(Rest) >= 0)
|
||||||
|
inline void component_storage::remove(entity_id e)
|
||||||
|
{
|
||||||
|
remove<First>(e);
|
||||||
|
remove<Second>(e);
|
||||||
|
(remove<Rest>(e), ...);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue