Cleanup plugin 'flows'
							parent
							
								
									29b0c4273e
								
							
						
					
					
						commit
						b0be2f55c6
					
				| @ -1,93 +1,75 @@ | |||||||
| // This tool counts static tiles and active flows of water and magma.
 | // This tool counts static tiles and active flows of water and magma.
 | ||||||
| 
 | 
 | ||||||
| #include <iostream> |  | ||||||
| #include <vector> |  | ||||||
| #include <map> |  | ||||||
| #include <stddef.h> |  | ||||||
| #include <string.h> |  | ||||||
| using namespace std; |  | ||||||
| #include "Core.h" | #include "Core.h" | ||||||
| #include <Console.h> | #include <Console.h> | ||||||
| #include <Export.h> | #include <Export.h> | ||||||
| #include <PluginManager.h> | #include <PluginManager.h> | ||||||
| #include <modules/Maps.h> |  | ||||||
| using namespace DFHack; |  | ||||||
| 
 |  | ||||||
| DFhackCExport command_result df_flows (Core * c, vector <string> & parameters); |  | ||||||
| 
 | 
 | ||||||
| DFhackCExport const char * plugin_name ( void ) | #include <DataDefs.h> | ||||||
| { | #include "df/world.h" | ||||||
|     return "flows"; | #include "df/map_block.h" | ||||||
| } | #include "df/tile_liquid.h" | ||||||
| 
 | 
 | ||||||
| DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand> &commands) | using std::string; | ||||||
| { | using std::vector; | ||||||
|     commands.clear(); | using namespace DFHack; | ||||||
|     commands.push_back(PluginCommand("flows", |  | ||||||
|                                      "Counts map blocks with flowing liquids.", |  | ||||||
|                                      df_flows)); |  | ||||||
|     return CR_OK; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| DFhackCExport command_result plugin_shutdown ( Core * c ) | using df::global::world; | ||||||
| { |  | ||||||
|     return CR_OK; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| DFhackCExport command_result df_flows (Core * c, vector <string> & parameters) | DFhackCExport command_result df_flows (Core * c, vector <string> & parameters) | ||||||
| { | { | ||||||
|     uint32_t x_max,y_max,z_max; |     CoreSuspender suspend(c); | ||||||
|     DFHack::designations40d designations; |  | ||||||
|     DFHack::Maps *Maps; |  | ||||||
| 
 | 
 | ||||||
|     c->Suspend(); |     int flow1 = 0, flow2 = 0, flowboth = 0, water = 0, magma = 0; | ||||||
|     Maps = c->getMaps(); |  | ||||||
|     // init the map
 |  | ||||||
|     if(!Maps->Start()) |  | ||||||
|     { |  | ||||||
|         c->con.printerr("Can't init map.\n"); |  | ||||||
|         c->Resume(); |  | ||||||
|         return CR_FAILURE; |  | ||||||
|     } |  | ||||||
|     DFHack::t_blockflags bflags; |  | ||||||
|     Maps->getSize(x_max,y_max,z_max); |  | ||||||
|     // walk the map, count flowing tiles, magma, water
 |  | ||||||
|     uint32_t flow1=0, flow2=0, flowboth=0, water=0, magma=0; |  | ||||||
|     c->con.print("Counting flows and liquids ...\n"); |     c->con.print("Counting flows and liquids ...\n"); | ||||||
|     for(uint32_t x = 0; x< x_max;x++) | 
 | ||||||
|     { |     for (int i = 0; i < world->map.map_blocks.size(); i++) | ||||||
|         for(uint32_t y = 0; y< y_max;y++) |  | ||||||
|         { |  | ||||||
|             for(uint32_t z = 0; z< z_max;z++) |  | ||||||
|             { |  | ||||||
|                 if(Maps->getBlock(x,y,z)) |  | ||||||
|     { |     { | ||||||
|                     Maps->ReadBlockFlags(x, y, z, bflags); |         df::map_block *cur = world->map.map_blocks[i]; | ||||||
|                     Maps->ReadDesignations(x, y, z, &designations); |         if (cur->flags.is_set(df::block_flags::UpdateLiquid)) | ||||||
|                     if (bflags.bits.liquid_1) |  | ||||||
|             flow1++; |             flow1++; | ||||||
|                     if (bflags.bits.liquid_2) |         if (cur->flags.is_set(df::block_flags::UpdateLiquidTwice)) | ||||||
|             flow2++; |             flow2++; | ||||||
|                     if (bflags.bits.liquid_1 && bflags.bits.liquid_2) |         if (cur->flags.is_set(df::block_flags::UpdateLiquid) && cur->flags.is_set(df::block_flags::UpdateLiquidTwice)) | ||||||
|             flowboth++; |             flowboth++; | ||||||
|                     for (uint32_t i = 0; i < 16;i++) for (uint32_t j = 0; j < 16;j++) |         for (int x = 0; x < 16; x++) | ||||||
|         { |         { | ||||||
|                         if (designations[i][j].bits.liquid_type == DFHack::liquid_magma) |             for (int y = 0; y < 16; y++) | ||||||
|  |             { | ||||||
|  |                 // only count tiles with actual liquid in them
 | ||||||
|  |                 if (cur->designation[x][y].bits.flow_size == 0) | ||||||
|  |                     continue; | ||||||
|  |                 if (cur->designation[x][y].bits.liquid_type == df::tile_liquid::Magma) | ||||||
|                     magma++; |                     magma++; | ||||||
|                         if (designations[i][j].bits.liquid_type == DFHack::liquid_water) |                 if (cur->designation[x][y].bits.liquid_type == df::tile_liquid::Water) | ||||||
|                     water++; |                     water++; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     c->con.print("Blocks with liquid_1=true: %d\n", flow1); | ||||||
|  |     c->con.print("Blocks with liquid_2=true: %d\n", flow2); | ||||||
|  |     c->con.print("Blocks with both:          %d\n", flowboth); | ||||||
|  |     c->con.print("Water tiles:               %d\n", water); | ||||||
|  |     c->con.print("Magma tiles:               %d\n", magma); | ||||||
|  |     return CR_OK; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | DFhackCExport const char * plugin_name ( void ) | ||||||
|  | { | ||||||
|  |     return "flows"; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand> &commands) | ||||||
|  | { | ||||||
|  |     commands.clear(); | ||||||
|  |     commands.push_back(PluginCommand("flows", | ||||||
|  |         "Counts map blocks with flowing liquids.", | ||||||
|  |         df_flows)); | ||||||
|  |     return CR_OK; | ||||||
| } | } | ||||||
|     c->con.print("Blocks with liquid_1=true: %d\n" | 
 | ||||||
|                  "Blocks with liquid_2=true: %d\n" | DFhackCExport command_result plugin_shutdown ( Core * c ) | ||||||
|                  "Blocks with both:          %d\n" | { | ||||||
|                  "Water tiles:               %d\n" |  | ||||||
|                  "Magma tiles:               %d\n" |  | ||||||
|                  ,flow1, flow2, flowboth, water, magma |  | ||||||
|                 ); |  | ||||||
|     c->Resume(); |  | ||||||
|     return CR_OK; |     return CR_OK; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue