Я некоторое время пытался сериализовать реестр ENTT. Тем не менее, я не могу сериализовать любые компоненты с помощью entt :: sparse_set. Я стараюсь избегать их использования, но некоторые варианты использования требуют этого, по моему, возможно, наивно. Я написал функцию сериализации, чтобы преобразовать их в векторы на выходе, но не могу заставить ее работать/компилировать, когда такие компоненты включены в сериализацию. Все мои подходы работают для других компонентов без sparse_set. Ранее я использовал вектор EntityData, но он также, кажется, не может скопировать Sparse_sets. Есть ли способ, которым я могу определить функцию, чтобы SPARSE_SETS можно было сериализовать и десериализовано, которая проживает в компоненте?struct StarSystem {
//bary center always 0,0
sf::Vector2f location;
vector bodies; //or group?, OR a vector
entt::sparse_set entities;
StarSystem() {
}
StarSystem(sf::Vector2f pos) {
location = pos;
}
void addBody(entt::entity entity) {
bodies.push_back(entity);
}
void insertFleet(entt::entity entity) {
//check explored flags, flag system. Generate system if empty
entities.push(entity);
}
template
void serialize(Archive& archive) {
archive(CEREAL_NVP(location),
CEREAL_NVP(bodies),
CEREAL_NVP(entities)
);
}
static std::string typeName() { return "StarSystem"; }
};
< /code>
Функция сериализации: < /p>
void serialize_registry(entt::registry const& registry) {
std::string savePath = "save.json";
std::ofstream os(savePath);
cereal::JSONOutputArchive archive(os);
auto regView = registry.view();
archive.setNextName("entities");
archive.startNode();
for(auto entity : regView){
archive.startNode();
archive(cereal::make_nvp("entity", entity));
[&archive, ®istry, entity] (std::variant) {
((registry.all_of(entity)
? (void)archive(cereal::make_nvp(Types::typeName(), registry.get(entity)))
: void()), ...);
}(entityComponents{});
archive.finishNode();
}
archive.finishNode();
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... sparse-set
Как сериализовать entt :: sparse_set? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Можно ли добавить вариант STD :: в качестве компонента в сущность в ENTT?
Anonymous » » в форуме C++ - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-