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(w.has<ChoosenOne, Name>(e));
|
||||
|
||||
e.remove<ChoosenOne>();
|
||||
e.remove<ChoosenOne, Name>();
|
||||
|
||||
REQUIRE_FALSE(e.has<ChoosenOne, Name>());
|
||||
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>
|
||||
void set(const T&... comps);
|
||||
|
||||
template<typename T>
|
||||
template<typename... T>
|
||||
void remove();
|
||||
private:
|
||||
entity_id id = 0;
|
||||
|
@ -78,6 +78,10 @@ namespace zecsy
|
|||
|
||||
template<typename T>
|
||||
void remove(entity_id e);
|
||||
|
||||
template<typename First, typename Second, typename... Rest>
|
||||
requires(sizeof...(Rest) >= 0)
|
||||
void remove(entity_id e);
|
||||
private:
|
||||
using comp_index = std::type_index;
|
||||
using comp_to_bitset = std::unordered_map<comp_index, zecsy_bits>;
|
||||
|
@ -117,7 +121,7 @@ namespace zecsy
|
|||
template<typename... T>
|
||||
void set(entity_id e, const T&... comps);
|
||||
|
||||
template<typename T>
|
||||
template<typename... T>
|
||||
void remove(entity_id e);
|
||||
private:
|
||||
zecsy_bits entities_bitset;
|
||||
|
@ -277,16 +281,16 @@ namespace zecsy
|
|||
entity_dict[typeid(T)].erase(e);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
template<typename... T>
|
||||
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()
|
||||
{
|
||||
w->remove<T>(id);
|
||||
w->remove<T...>(id);
|
||||
}
|
||||
|
||||
template<typename... T>
|
||||
|
@ -320,4 +324,13 @@ namespace zecsy
|
|||
set(e, comp1);
|
||||
(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