|  |  |  | @ -23,6 +23,8 @@ typedef void (*checkTile)(DFCoord, MapExtras::MapCache &); | 
		
	
		
			
				|  |  |  |  | //Forward Declarations for Commands
 | 
		
	
		
			
				|  |  |  |  | command_result filltraffic(color_ostream &out, std::vector<std::string> & params); | 
		
	
		
			
				|  |  |  |  | command_result alltraffic(color_ostream &out, std::vector<std::string> & params); | 
		
	
		
			
				|  |  |  |  | command_result restrictLiquid(color_ostream &out, std::vector<std::string> & params); | 
		
	
		
			
				|  |  |  |  | command_result restrictIce(color_ostream &out, std::vector<std::string> & params); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | //Forward Declarations for Utility Functions
 | 
		
	
		
			
				|  |  |  |  | command_result setAllMatching(color_ostream &out, checkTile checkProc, | 
		
	
	
		
			
				
					|  |  |  | @ -34,6 +36,9 @@ void allNormal(DFCoord coord, MapExtras::MapCache & map); | 
		
	
		
			
				|  |  |  |  | void allLow(DFCoord coord, MapExtras::MapCache & map); | 
		
	
		
			
				|  |  |  |  | void allRestricted(DFCoord coord, MapExtras::MapCache & map); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void restrictLiquidProc(DFCoord coord, MapExtras::MapCache &map); | 
		
	
		
			
				|  |  |  |  | void restrictIceProc(DFCoord coord, MapExtras::MapCache &map); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | DFHACK_PLUGIN("filltraffic"); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | DFhackCExport command_result plugin_init ( color_ostream &out, std::vector <PluginCommand> &commands) | 
		
	
	
		
			
				
					|  |  |  | @ -66,6 +71,14 @@ DFhackCExport command_result plugin_init ( color_ostream &out, std::vector <Plug | 
		
	
		
			
				|  |  |  |  |         "  L: Low Traffic\n" | 
		
	
		
			
				|  |  |  |  |         "  R: Restricted Traffic\n" | 
		
	
		
			
				|  |  |  |  |     )); | 
		
	
		
			
				|  |  |  |  | 	commands.push_back(PluginCommand( | 
		
	
		
			
				|  |  |  |  | 		"restrictliquids","Restrict on every visible square with liquid", | 
		
	
		
			
				|  |  |  |  | 		restrictLiquid, false, "" | 
		
	
		
			
				|  |  |  |  | 	)); | 
		
	
		
			
				|  |  |  |  | 	commands.push_back(PluginCommand( | 
		
	
		
			
				|  |  |  |  | 		"restrictice","Restrict traffic on squares above visible ice", | 
		
	
		
			
				|  |  |  |  | 		restrictIce, false, "" | 
		
	
		
			
				|  |  |  |  | 	)); | 
		
	
		
			
				|  |  |  |  |     return CR_OK; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
	
		
			
				
					|  |  |  | @ -265,6 +278,16 @@ command_result alltraffic(color_ostream &out, std::vector<std::string> & params) | 
		
	
		
			
				|  |  |  |  |     return setAllMatching(out, proc); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | command_result restrictLiquid(color_ostream &out, std::vector<std::string> & params) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  |   return setAllMatching(out, restrictLiquidProc); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | command_result restrictIce(color_ostream &out, std::vector<std::string> & params) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	return setAllMatching(out, restrictIceProc); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | //Helper function for writing new functions that check every tile on the map.
 | 
		
	
		
			
				|  |  |  |  | //newTraffic is the traffic designation to set.
 | 
		
	
		
			
				|  |  |  |  | //check takes a coordinate and the map cache as arguments, and returns true if the criteria is met.
 | 
		
	
	
		
			
				
					|  |  |  | @ -356,3 +379,33 @@ void allRestricted(DFCoord coord, MapExtras::MapCache &map) | 
		
	
		
			
				|  |  |  |  |     des.bits.traffic = tile_traffic::Restricted; | 
		
	
		
			
				|  |  |  |  |     map.setDesignationAt(coord, des); | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | //Restrict traffic if tile is visible and liquid is present.
 | 
		
	
		
			
				|  |  |  |  | void restrictLiquidProc(DFCoord coord, MapExtras::MapCache &map) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	df::tile_designation des = map.designationAt(coord); | 
		
	
		
			
				|  |  |  |  | 	if ((des.bits.hidden == 0) && (des.bits.flow_size != 0)) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		des.bits.traffic = tile_traffic::Restricted; | 
		
	
		
			
				|  |  |  |  | 		map.setDesignationAt(coord, des); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | //Restrict traffice if tile is above visible ice wall.
 | 
		
	
		
			
				|  |  |  |  | void restrictIceProc(DFCoord coord, MapExtras::MapCache &map) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	//There is no ice below the bottom of the map.
 | 
		
	
		
			
				|  |  |  |  | 	if (coord.z == 0) | 
		
	
		
			
				|  |  |  |  | 		return; | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	DFCoord tile_below = DFCoord(coord.x, coord.y, coord.z - 1); | 
		
	
		
			
				|  |  |  |  | 	df::tiletype tt = map.tiletypeAt(tile_below); | 
		
	
		
			
				|  |  |  |  | 	df::tile_designation des = map.designationAt(tile_below); | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 	if ((des.bits.hidden == 0) && (tileMaterial(tt) == tiletype_material::FROZEN_LIQUID)) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		des = map.designationAt(coord); | 
		
	
		
			
				|  |  |  |  | 		des.bits.traffic = tile_traffic::Restricted; | 
		
	
		
			
				|  |  |  |  | 		map.setDesignationAt(coord, des); | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |