Я некоторое время пытался сериализовать реестр 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++
Программы на C++. Форум разработчиков
1754961182
Anonymous
Я некоторое время пытался сериализовать реестр 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();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79732617/how-to-serialize-enttsparse-set[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия