Артемида - как удалить все сущности из мира
Я хочу удалить все сущности из мира. И если для сущности зарегистрирован тег или группа, я тоже хочу их удалить. Как будто не было такой сущности вообще. Это очень похоже на World.delete
функция, но вы должны зациклить на всех сущностях. Я не могу найти способ. И не могу поверить, что дизайнеры не подготовили такую функциональность для очистки мира от сущностей. Я что-то пропустил?
1 ответ
По умолчанию не существует способа удаления всех сущностей из Мира - обычно это делается путем удаления и воссоздания мира - но это может быть легко достигнуто путем добавления собственного менеджера:
public final class EntityTracker extends Manager {
private Bag<Entity> entities = new Bag<Entity>();
@Override
public void added(Entity e) {
entities.add(e);
}
@Override
public void deleted(Entity e) {
entities.remove(e);
}
public void deleteAllEntities() {
for (Entity e : entities)
e.deleteFromWorld();
}
}
В последних версиях artemis-odb проще использовать AspectSubscriptionManager:
IntBag entities = world.getAspectSubscriptionManager()
.get(Aspect.all())
.getEntities();
int[] ids = entities.getData();
for (int i = 0, s = entities.size(); s > i; i++) {
world.delete(ids[i]);
}
редактировать: приведенный выше код предполагает artemis-odb; Я не уверен, что TagManager и GroupManager vanilla artemis автоматически удаляют объекты при удалении.