MCPcopy Create free account
hub / github.com/DFHack/dfhack / MapCache

Method MapCache

library/modules/MapCache.cpp:1236–1293  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1234}
1235
1236MapExtras::MapCache::MapCache()
1237{
1238 valid = 0;
1239 Maps::getSize(x_bmax, y_bmax, z_max);
1240 x_tmax = x_bmax*16; y_tmax = y_bmax*16;
1241 std::vector<df::coord2d> geoidx;
1242 std::vector<std::vector<int16_t> > layer_mats;
1243 validgeo = Maps::ReadGeology(&layer_mats, &geoidx);
1244 valid = true;
1245
1246 if (auto data = df::global::world->world_data)
1247 {
1248 for (size_t i = 0; i < data->midmap_data.region_details.size(); i++)
1249 {
1250 auto info = data->midmap_data.region_details[i];
1251 region_details[info->pos] = info;
1252 }
1253 }
1254
1255 biomes.resize(layer_mats.size());
1256
1257 for (size_t i = 0; i < layer_mats.size(); i++)
1258 {
1259 biomes[i].pos = geoidx[i];
1260 biomes[i].biome = Maps::getRegionBiome(geoidx[i]);
1261 biomes[i].details = region_details[geoidx[i]];
1262
1263 biomes[i].geo_index = biomes[i].biome ? biomes[i].biome->geo_index : -1;
1264 biomes[i].geobiome = df::world_geo_biome::find(biomes[i].geo_index);
1265
1266 biomes[i].lava_stone = -1;
1267 biomes[i].default_soil = -1;
1268 biomes[i].default_stone = -1;
1269
1270 if (biomes[i].details)
1271 biomes[i].lava_stone = biomes[i].details->lava_stone;
1272
1273 memset(biomes[i].layer_stone, -1, sizeof(biomes[i].layer_stone));
1274
1275 for (size_t j = 0; j < std::min<size_t>(BiomeInfo::MAX_LAYERS,layer_mats[i].size()); j++)
1276 {
1277 biomes[i].layer_stone[j] = layer_mats[i][j];
1278
1279 auto raw = df::inorganic_raw::find(layer_mats[i][j]);
1280 if (!raw)
1281 continue;
1282
1283 bool is_soil = raw->flags.is_set(inorganic_flags::SOIL_ANY);
1284 if (is_soil)
1285 biomes[i].default_soil = layer_mats[i][j];
1286 else if (biomes[i].default_stone == -1)
1287 biomes[i].default_stone = layer_mats[i][j];
1288 }
1289
1290 while (layer_mats[i].size() < 16)
1291 layer_mats[i].push_back(-1);
1292 }
1293}

Callers

nothing calls this directly

Calls 4

is_setMethod · 0.80
findFunction · 0.50
sizeMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected