private void removeEntityInternal(Entity entity) { entities.removeValue(entity, true); if (!entity.getFamilyBits().isEmpty()) { for (Entry<Family, Array<Entity>> entry : families.entries()) { Family family = entry.key; Array<Entity> entities = entry.value; if (family.matches(entity)) { entities.removeValue(entity, true); entity.getFamilyBits().clear(family.getIndex()); notifyFamilyListenersRemove(family, entity); } } } entity.componentAdded.remove(componentAdded); entity.componentRemoved.remove(componentRemoved); Object[] items = listeners.begin(); for (int i = 0, n = listeners.size; i < n; i++) { EntityListener listener = (EntityListener) items[i]; listener.entityRemoved(entity); } listeners.end(); }
private void updateFamilyMembership(Entity entity) { for (Entry<Family, Array<Entity>> entry : families.entries()) { Family family = entry.key; Array<Entity> entities = entry.value; int familyIndex = family.getIndex(); boolean belongsToFamily = entity.getFamilyBits().get(familyIndex); boolean matches = family.matches(entity); if (!belongsToFamily && matches) { entities.add(entity); entity.getFamilyBits().set(familyIndex); notifyFamilyListenersAdd(family, entity); } else if (belongsToFamily && !matches) { entities.removeValue(entity, true); entity.getFamilyBits().clear(familyIndex); notifyFamilyListenersRemove(family, entity); } } }