| 282 | } |
| 283 | |
| 284 | DFhackCExport command_result plugin_load_site_data (color_ostream &out) { |
| 285 | cycle_timestamp = 0; |
| 286 | walkability_timestamp = -1; |
| 287 | config = World::GetPersistentSiteData(CONFIG_KEY); |
| 288 | |
| 289 | if (!config.isValid()) { |
| 290 | DEBUG(control,out).print("no config found in this save; initializing\n"); |
| 291 | config = World::AddPersistentSiteData(CONFIG_KEY); |
| 292 | } |
| 293 | if (config.get_int(CONFIG_RECONSTRUCT) == -1) |
| 294 | config.set_bool(CONFIG_RECONSTRUCT, true); |
| 295 | validate_materials_config(out); |
| 296 | |
| 297 | DEBUG(control,out).print("loading persisted state\n"); |
| 298 | |
| 299 | planned_buildings.clear(); |
| 300 | tasks.clear(); |
| 301 | reset_filters(out); |
| 302 | |
| 303 | vector<PersistentDataItem> filter_configs; |
| 304 | World::GetPersistentSiteData(&filter_configs, FILTER_CONFIG_KEY); |
| 305 | for (auto &cfg : filter_configs) { |
| 306 | BuildingTypeKey key = DefaultItemFilters::getKey(cfg); |
| 307 | cur_item_filters.emplace(key, DefaultItemFilters(out, cfg, get_job_items(out, key))); |
| 308 | } |
| 309 | |
| 310 | vector<PersistentDataItem> building_configs; |
| 311 | World::GetPersistentSiteData(&building_configs, BLD_CONFIG_KEY); |
| 312 | const size_t num_building_configs = building_configs.size(); |
| 313 | bool unsuspend_on_finalize = !is_suspendmanager_enabled(out); |
| 314 | for (size_t idx = 0; idx < num_building_configs; ++idx) { |
| 315 | PlannedBuilding pb(out, building_configs[idx]); |
| 316 | df::building *bld = df::building::find(pb.id); |
| 317 | if (!bld) { |
| 318 | DEBUG(control,out).print("building {} no longer exists; skipping\n", pb.id); |
| 319 | pb.remove(out); |
| 320 | continue; |
| 321 | } |
| 322 | BuildingTypeKey key(bld->getType(), get_subtype(bld), bld->getCustomType()); |
| 323 | if (pb.item_filters.size() != get_item_filters(out, key).getItemFilters().size()) { |
| 324 | WARN(control).print("loaded state for building {} doesn't match world\n", pb.id); |
| 325 | pb.remove(out); |
| 326 | continue; |
| 327 | } |
| 328 | registerPlannedBuilding(out, pb, unsuspend_on_finalize); |
| 329 | } |
| 330 | |
| 331 | return CR_OK; |
| 332 | } |
| 333 | |
| 334 | static bool cycle_requested = false; |
| 335 |
nothing calls this directly
no test coverage detected