* Layer geology */
| 965 | * Layer geology |
| 966 | */ |
| 967 | bool 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 | |
| 1019 | uint16_t Maps::getWalkableGroup(df::coord pos) { |
| 1020 | auto block = getTileBlock(pos); |
nothing calls this directly
no test coverage detected