Артемида - как удалить все сущности из мира

Я хочу удалить все сущности из мира. И если для сущности зарегистрирован тег или группа, я тоже хочу их удалить. Как будто не было такой сущности вообще. Это очень похоже на 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 автоматически удаляют объекты при удалении.

Другие вопросы по тегам