|  |  |  | @ -32,6 +32,7 @@ distribution. | 
		
	
		
			
				|  |  |  |  | #include <cstring> | 
		
	
		
			
				|  |  |  |  | #include "df/map_block.h" | 
		
	
		
			
				|  |  |  |  | #include "df/block_square_event_mineralst.h" | 
		
	
		
			
				|  |  |  |  | #include "df/construction.h" | 
		
	
		
			
				|  |  |  |  | using namespace DFHack; | 
		
	
		
			
				|  |  |  |  | namespace MapExtras | 
		
	
		
			
				|  |  |  |  | { | 
		
	
	
		
			
				
					|  |  |  | @ -40,56 +41,78 @@ void SquashVeins (DFCoord bcoord, mapblock40d & mb, t_blockmaterials & materials | 
		
	
		
			
				|  |  |  |  |     memset(materials,-1,sizeof(materials)); | 
		
	
		
			
				|  |  |  |  |     std::vector <df::block_square_event_mineralst *> veins; | 
		
	
		
			
				|  |  |  |  |     Maps::SortBlockEvents(bcoord.x,bcoord.y,bcoord.z,&veins); | 
		
	
		
			
				|  |  |  |  |     //iterate through block rows
 | 
		
	
		
			
				|  |  |  |  |     for(uint32_t j = 0;j<16;j++) | 
		
	
		
			
				|  |  |  |  |     for (uint32_t x = 0;x<16;x++) for (uint32_t y = 0; y< 16;y++) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         //iterate through columns
 | 
		
	
		
			
				|  |  |  |  |         for (uint32_t k = 0; k< 16;k++) | 
		
	
		
			
				|  |  |  |  |         df::tiletype tt = mb.tiletypes[x][y]; | 
		
	
		
			
				|  |  |  |  |         if (tileMaterial(tt) == tiletype_material::MINERAL) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             df::tiletype tt = mb.tiletypes[k][j]; | 
		
	
		
			
				|  |  |  |  |             if(DFHack::tileMaterial(tt) == tiletype_material::MINERAL) | 
		
	
		
			
				|  |  |  |  |             for (size_t i = 0; i < veins.size(); i++) | 
		
	
		
			
				|  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |                 for(int i = (int) veins.size() - 1; i >= 0;i--) | 
		
	
		
			
				|  |  |  |  |                 if (veins[i]->getassignment(x,y)) | 
		
	
		
			
				|  |  |  |  |                 { | 
		
	
		
			
				|  |  |  |  |                     if(!!(((1 << k) & veins[i]->tile_bitmask[j]) >> k)) | 
		
	
		
			
				|  |  |  |  |                     { | 
		
	
		
			
				|  |  |  |  |                         materials[k][j] = veins[i]->inorganic_mat; | 
		
	
		
			
				|  |  |  |  |                         i = -1; | 
		
	
		
			
				|  |  |  |  |                     } | 
		
	
		
			
				|  |  |  |  |                     materials[x][y] = veins[i]->inorganic_mat; | 
		
	
		
			
				|  |  |  |  |                     break; | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void SquashRocks ( std::vector< std::vector <uint16_t> > * layerassign, DFHack::mapblock40d & mb, DFHack::t_blockmaterials & materials) | 
		
	
		
			
				|  |  |  |  | void SquashFrozenLiquids (DFCoord bcoord, mapblock40d & mb, tiletypes40d & frozen) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     // get the layer materials
 | 
		
	
		
			
				|  |  |  |  |     for(uint32_t xx = 0;xx<16;xx++) | 
		
	
		
			
				|  |  |  |  |     std::vector <df::block_square_event_frozen_liquidst *> ices; | 
		
	
		
			
				|  |  |  |  |     Maps::SortBlockEvents(bcoord.x,bcoord.y,bcoord.z,NULL,&ices); | 
		
	
		
			
				|  |  |  |  |     for (uint32_t x = 0; x < 16; x++) for (uint32_t y = 0; y < 16; y++) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         for (uint32_t yy = 0; yy< 16;yy++) | 
		
	
		
			
				|  |  |  |  |         df::tiletype tt = mb.tiletypes[x][y]; | 
		
	
		
			
				|  |  |  |  |         frozen[x][y] = tiletype::Void; | 
		
	
		
			
				|  |  |  |  |         if (tileMaterial(tt) == tiletype_material::FROZEN_LIQUID) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             uint8_t test = mb.designation[xx][yy].bits.biome; | 
		
	
		
			
				|  |  |  |  |             if( test >= sizeof(mb.biome_indices)) | 
		
	
		
			
				|  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |                 materials[xx][yy] = -1; | 
		
	
		
			
				|  |  |  |  |                 continue; | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             if (mb.biome_indices[test] >= layerassign->size()) | 
		
	
		
			
				|  |  |  |  |             for (size_t i = 0; i < ices.size(); i++) | 
		
	
		
			
				|  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |                 materials[xx][yy] = -1; | 
		
	
		
			
				|  |  |  |  |                 continue; | 
		
	
		
			
				|  |  |  |  |                 df::tiletype tt2 = ices[i]->tiles[x][y]; | 
		
	
		
			
				|  |  |  |  |                 if (tt2 != tiletype::Void) | 
		
	
		
			
				|  |  |  |  |                 { | 
		
	
		
			
				|  |  |  |  |                     frozen[x][y] = tt2; | 
		
	
		
			
				|  |  |  |  |                     break; | 
		
	
		
			
				|  |  |  |  |                 } | 
		
	
		
			
				|  |  |  |  |             } | 
		
	
		
			
				|  |  |  |  |             materials[xx][yy] = | 
		
	
		
			
				|  |  |  |  |             layerassign->at(mb.biome_indices[test])[mb.designation[xx][yy].bits.geolayer_index]; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void SquashConstructions (DFCoord bcoord, mapblock40d & mb, tiletypes40d & constructions) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     for (uint32_t x = 0; x < 16; x++) for (uint32_t y = 0; y < 16; y++) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         df::tiletype tt = mb.tiletypes[x][y]; | 
		
	
		
			
				|  |  |  |  |         constructions[x][y] = tiletype::Void; | 
		
	
		
			
				|  |  |  |  |         if (tileMaterial(tt) == tiletype_material::CONSTRUCTION) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             DFCoord coord(bcoord.x*16 + x, bcoord.y*16 + y, bcoord.z); | 
		
	
		
			
				|  |  |  |  |             df::construction *con = df::construction::find(coord); | 
		
	
		
			
				|  |  |  |  |             if (con) | 
		
	
		
			
				|  |  |  |  |                 constructions[x][y] = con->original_tile; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void SquashRocks ( std::vector< std::vector <uint16_t> > * layerassign, mapblock40d & mb, t_blockmaterials & materials) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     // get the layer materials
 | 
		
	
		
			
				|  |  |  |  |     for (uint32_t x = 0; x < 16; x++) for (uint32_t y = 0; y < 16; y++) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         materials[x][y] = -1; | 
		
	
		
			
				|  |  |  |  |         uint8_t test = mb.designation[x][y].bits.biome; | 
		
	
		
			
				|  |  |  |  |         if ((test < sizeof(mb.biome_indices)) && (mb.biome_indices[test] < layerassign->size())) | 
		
	
		
			
				|  |  |  |  |             materials[x][y] = layerassign->at(mb.biome_indices[test])[mb.designation[x][y].bits.geolayer_index]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class Block | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |     public: | 
		
	
		
			
				|  |  |  |  |     Block(DFHack::DFCoord _bcoord, std::vector< std::vector <uint16_t> > * layerassign = 0) | 
		
	
		
			
				|  |  |  |  |     Block(DFCoord _bcoord, std::vector< std::vector <uint16_t> > * layerassign = 0) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         dirty_designations = false; | 
		
	
		
			
				|  |  |  |  |         dirty_tiletypes = false; | 
		
	
	
		
			
				
					|  |  |  | @ -102,6 +125,8 @@ class Block | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             Maps::ReadTemperatures(bcoord.x,bcoord.y, bcoord.z,&temp1,&temp2); | 
		
	
		
			
				|  |  |  |  |             SquashVeins(bcoord,raw,veinmats); | 
		
	
		
			
				|  |  |  |  |             SquashConstructions(bcoord, raw, contiles); | 
		
	
		
			
				|  |  |  |  |             SquashFrozenLiquids(bcoord, raw, icetiles); | 
		
	
		
			
				|  |  |  |  |             if(layerassign) | 
		
	
		
			
				|  |  |  |  |                 SquashRocks(layerassign,raw,basemats); | 
		
	
		
			
				|  |  |  |  |             else | 
		
	
	
		
			
				
					|  |  |  | @ -122,6 +147,15 @@ class Block | 
		
	
		
			
				|  |  |  |  |         veinmats[p.x][p.y] = -1; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     df::tiletype BaseTileTypeAt(df::coord2d p) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         if (contiles[p.x][p.y] != tiletype::Void) | 
		
	
		
			
				|  |  |  |  |             return contiles[p.x][p.y]; | 
		
	
		
			
				|  |  |  |  |         else if (icetiles[p.x][p.y] != tiletype::Void) | 
		
	
		
			
				|  |  |  |  |             return icetiles[p.x][p.y]; | 
		
	
		
			
				|  |  |  |  |         else | 
		
	
		
			
				|  |  |  |  |             return raw.tiletypes[p.x][p.y]; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     df::tiletype TileTypeAt(df::coord2d p) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         return raw.tiletypes[p.x][p.y]; | 
		
	
	
		
			
				
					|  |  |  | @ -189,11 +223,11 @@ class Block | 
		
	
		
			
				|  |  |  |  |         return true; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     DFHack::t_blockflags BlockFlags() | 
		
	
		
			
				|  |  |  |  |     t_blockflags BlockFlags() | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         return raw.blockflags; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setBlockFlags(DFHack::t_blockflags des) | 
		
	
		
			
				|  |  |  |  |     bool setBlockFlags(t_blockflags des) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         if(!valid) return false; | 
		
	
		
			
				|  |  |  |  |         dirty_blockflags = true; | 
		
	
	
		
			
				
					|  |  |  | @ -239,12 +273,14 @@ class Block | 
		
	
		
			
				|  |  |  |  |     bool dirty_temperatures:1; | 
		
	
		
			
				|  |  |  |  |     bool dirty_blockflags:1; | 
		
	
		
			
				|  |  |  |  |     bool dirty_occupancies:1; | 
		
	
		
			
				|  |  |  |  |     DFHack::mapblock40d raw; | 
		
	
		
			
				|  |  |  |  |     DFHack::DFCoord bcoord; | 
		
	
		
			
				|  |  |  |  |     DFHack::t_blockmaterials veinmats; | 
		
	
		
			
				|  |  |  |  |     DFHack::t_blockmaterials basemats; | 
		
	
		
			
				|  |  |  |  |     DFHack::t_temperatures temp1; | 
		
	
		
			
				|  |  |  |  |     DFHack::t_temperatures temp2; | 
		
	
		
			
				|  |  |  |  |     mapblock40d raw; | 
		
	
		
			
				|  |  |  |  |     DFCoord bcoord; | 
		
	
		
			
				|  |  |  |  |     t_blockmaterials veinmats; | 
		
	
		
			
				|  |  |  |  |     t_blockmaterials basemats; | 
		
	
		
			
				|  |  |  |  |     t_temperatures temp1; | 
		
	
		
			
				|  |  |  |  |     t_temperatures temp2; | 
		
	
		
			
				|  |  |  |  |     tiletypes40d contiles; // what's underneath constructions
 | 
		
	
		
			
				|  |  |  |  |     tiletypes40d icetiles; // what's underneath ice
 | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | class MapCache | 
		
	
	
		
			
				
					|  |  |  | @ -266,18 +302,20 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return valid; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     /// get the map block at a *block* coord. Block coord = tile coord / 16
 | 
		
	
		
			
				|  |  |  |  |     Block * BlockAt (DFHack::DFCoord blockcoord) | 
		
	
		
			
				|  |  |  |  |     Block * BlockAt (DFCoord blockcoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         if(!valid) | 
		
	
		
			
				|  |  |  |  |             return 0; | 
		
	
		
			
				|  |  |  |  |         std::map <DFHack::DFCoord, Block*>::iterator iter = blocks.find(blockcoord); | 
		
	
		
			
				|  |  |  |  |         std::map <DFCoord, Block*>::iterator iter = blocks.find(blockcoord); | 
		
	
		
			
				|  |  |  |  |         if(iter != blocks.end()) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             return (*iter).second; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         else | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             if(blockcoord.x < x_bmax && blockcoord.y < y_bmax && blockcoord.z < z_max) | 
		
	
		
			
				|  |  |  |  |             if(blockcoord.x >= 0 && blockcoord.x < x_bmax && | 
		
	
		
			
				|  |  |  |  |                 blockcoord.y >= 0 && blockcoord.y < y_bmax && | 
		
	
		
			
				|  |  |  |  |                 blockcoord.z >= 0 && blockcoord.z < z_max) | 
		
	
		
			
				|  |  |  |  |             { | 
		
	
		
			
				|  |  |  |  |                 Block * nblo; | 
		
	
		
			
				|  |  |  |  |                 if(validgeo) | 
		
	
	
		
			
				
					|  |  |  | @ -290,7 +328,16 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |             return 0; | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     df::tiletype tiletypeAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     df::tiletype baseTiletypeAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             return b->BaseTileTypeAt(tilecoord % 16); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return tiletype::Void; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     df::tiletype tiletypeAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -299,7 +346,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return tiletype::Void; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setTiletypeAt(DFHack::DFCoord tilecoord, df::tiletype tiletype) | 
		
	
		
			
				|  |  |  |  |     bool setTiletypeAt(DFCoord tilecoord, df::tiletype tiletype) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -310,7 +357,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     uint16_t temperature1At (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     uint16_t temperature1At (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -319,7 +366,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setTemp1At(DFHack::DFCoord tilecoord, uint16_t temperature) | 
		
	
		
			
				|  |  |  |  |     bool setTemp1At(DFCoord tilecoord, uint16_t temperature) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -330,7 +377,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     uint16_t temperature2At (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     uint16_t temperature2At (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -339,7 +386,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setTemp2At(DFHack::DFCoord tilecoord, uint16_t temperature) | 
		
	
		
			
				|  |  |  |  |     bool setTemp2At(DFCoord tilecoord, uint16_t temperature) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -350,7 +397,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     int16_t veinMaterialAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     int16_t veinMaterialAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -359,7 +406,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     int16_t baseMaterialAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     int16_t baseMaterialAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -368,7 +415,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool clearMaterialAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     bool clearMaterialAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -378,7 +425,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return 0; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     df::tile_designation designationAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     df::tile_designation designationAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -389,7 +436,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         temp.whole = 0; | 
		
	
		
			
				|  |  |  |  |         return temp; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setDesignationAt (DFHack::DFCoord tilecoord, df::tile_designation des) | 
		
	
		
			
				|  |  |  |  |     bool setDesignationAt (DFCoord tilecoord, df::tile_designation des) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -400,7 +447,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     df::tile_occupancy occupancyAt (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     df::tile_occupancy occupancyAt (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -411,7 +458,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         temp.whole = 0; | 
		
	
		
			
				|  |  |  |  |         return temp; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool setOccupancyAt (DFHack::DFCoord tilecoord, df::tile_occupancy occ) | 
		
	
		
			
				|  |  |  |  |     bool setOccupancyAt (DFCoord tilecoord, df::tile_occupancy occ) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -422,7 +469,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |         return false; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     bool testCoord (DFHack::DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     bool testCoord (DFCoord tilecoord) | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         Block * b= BlockAt(tilecoord / 16); | 
		
	
		
			
				|  |  |  |  |         if(b && b->valid) | 
		
	
	
		
			
				
					|  |  |  | @ -433,7 +480,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     bool WriteAll() | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         std::map<DFHack::DFCoord, Block *>::iterator p; | 
		
	
		
			
				|  |  |  |  |         std::map<DFCoord, Block *>::iterator p; | 
		
	
		
			
				|  |  |  |  |         for(p = blocks.begin(); p != blocks.end(); p++) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             p->second->Write(); | 
		
	
	
		
			
				
					|  |  |  | @ -442,7 +489,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     void trash() | 
		
	
		
			
				|  |  |  |  |     { | 
		
	
		
			
				|  |  |  |  |         std::map<DFHack::DFCoord, Block *>::iterator p; | 
		
	
		
			
				|  |  |  |  |         std::map<DFCoord, Block *>::iterator p; | 
		
	
		
			
				|  |  |  |  |         for(p = blocks.begin(); p != blocks.end(); p++) | 
		
	
		
			
				|  |  |  |  |         { | 
		
	
		
			
				|  |  |  |  |             delete p->second; | 
		
	
	
		
			
				
					|  |  |  | @ -458,7 +505,7 @@ class MapCache | 
		
	
		
			
				|  |  |  |  |     uint32_t y_tmax; | 
		
	
		
			
				|  |  |  |  |     uint32_t z_max; | 
		
	
		
			
				|  |  |  |  |     std::vector< std::vector <uint16_t> > layerassign; | 
		
	
		
			
				|  |  |  |  |     std::map<DFHack::DFCoord, Block *> blocks; | 
		
	
		
			
				|  |  |  |  |     std::map<DFCoord, Block *> blocks; | 
		
	
		
			
				|  |  |  |  | }; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | #endif |