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

Method ReadGeology

library/modules/Maps.cpp:967–1017  ·  view source on GitHub ↗

* Layer geology */

Source from the content-addressed store, hash-verified

965* Layer geology
966*/
967bool Maps::ReadGeology(vector<vector<int16_t> > *layer_mats, vector<df::coord2d> *geoidx)
968{
969 if (!world->world_data)
970 return false;
971
972 layer_mats->resize(eBiomeCount);
973 geoidx->resize(eBiomeCount);
974
975 for (int i = 0; i < eBiomeCount; i++)
976 {
977 (*layer_mats)[i].clear();
978 (*geoidx)[i] = df::coord2d(-30000,-30000);
979 }
980
981 // regionX is in embark squares
982 // regionX/16 is in 16x16 embark square regions
983 df::coord2d map_region(world->map.region_x / 16, world->map.region_y / 16);
984
985 // iterate over 8 surrounding regions + local region
986 for (int i = eNorthWest; i < eBiomeCount; i++)
987 {
988 df::coord2d rgn_pos = getBiomeRgnPos(map_region, i);
989
990 (*geoidx)[i] = rgn_pos;
991
992 auto biome = getRegionBiome(rgn_pos);
993 if (!biome)
994 continue;
995
996 // get index into geoblock vector
997 int16_t geoindex = biome->geo_index;
998
999 /// geology blocks have a vector of layer descriptors
1000 // get the vector with pointer to layers
1001 df::world_geo_biome *geo_biome = df::world_geo_biome::find(geoindex);
1002 if (!geo_biome)
1003 continue;
1004
1005 auto &geolayers = geo_biome->layers;
1006 auto &matvec = (*layer_mats)[i];
1007
1008 /// layer descriptor has a field that determines the type of stone/soil
1009 matvec.resize(geolayers.size());
1010
1011 // finally, read the layer matgloss
1012 for (size_t j = 0; j < geolayers.size(); j++)
1013 matvec[j] = geolayers[j]->mat_index;
1014 }
1015
1016 return true;
1017}
1018
1019uint16_t Maps::getWalkableGroup(df::coord pos) {
1020 auto block = getTileBlock(pos);

Callers

nothing calls this directly

Calls 5

getBiomeRgnPosFunction · 0.85
findFunction · 0.50
resizeMethod · 0.45
clearMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected