// Note bitset size is sizes of components and tags + 1
// This is to use the last extra bit as the result of a query
// with a Component or Tag not known to the Bitset.
- // Those queries will return a false bit every time.
+ // Those queries should return a false bit every time as long as EC::Manager
+ // does not change that last bit.
template <typename ComponentsList, typename TagsList>
struct Bitset :
public std::bitset<ComponentsList::size + TagsList::size + 1>
(*this)[Combined::size] = false;
}
- // TODO find a better way to handle non-member type in const
template <typename Component>
constexpr auto getComponentBit() const
{
constexpr auto getComponentBit()
{
auto index = EC::Meta::IndexOf<Component, Combined>::value;
- (*this)[Combined::size] = false;
return (*this)[index];
}
constexpr auto getTagBit()
{
auto index = EC::Meta::IndexOf<Tag, Combined>::value;
- (*this)[Combined::size] = false;
return (*this)[index];
}
template <typename Component, typename... Args>
void addComponent(const std::size_t& entityID, Args&&... args)
{
- if(!isAlive(entityID)
- || !EC::Meta::Contains<Component, Components>::value)
+ if(!EC::Meta::Contains<Component, Components>::value
+ || !isAlive(entityID))
{
return;
}
template <typename Component>
void removeComponent(const std::size_t& entityID)
{
- if(!isAlive(entityID))
+ if(!EC::Meta::Contains<Component, Components>::value
+ || !isAlive(entityID))
{
return;
}
template <typename Tag>
void addTag(const std::size_t& entityID)
{
- if(!isAlive(entityID)
- || !EC::Meta::Contains<Tag, Tags>::value)
+ if(!EC::Meta::Contains<Tag, Tags>::value
+ || !isAlive(entityID))
{
return;
}
template <typename Tag>
void removeTag(const std::size_t& entityID)
{
- if(!isAlive(entityID))
+ if(!EC::Meta::Contains<Tag, Tags>::value
+ || !isAlive(entityID))
{
return;
}
// generate bitsets for each signature
EC::Meta::forEachWithIndex<SigList>(
- [this, &signatureBitsets] (auto signature, const auto index) {
+ [&signatureBitsets] (auto signature, const auto index) {
signatureBitsets[index] =
BitsetType::template generateBitset
<decltype(signature)>();