@ -30,6 +30,11 @@ typedef std::vector<DFHack::t_feature*> FeatureListPointer;
typedef std : : map < DFHack : : DFCoord , FeatureListPointer > FeatureMap ;
typedef std : : vector < DFHack : : df_plant * > PlantList ;
# define TO_PTR_VEC(obj_vec, ptr_vec) \
ptr_vec . clear ( ) ; \
for ( size_t i = 0 ; i < obj_vec . size ( ) ; i + + ) \
ptr_vec . push_back ( & obj_vec [ i ] )
template < template < typename > class P = std : : greater >
struct compare_pair_second
{
@ -40,8 +45,10 @@ struct compare_pair_second
}
} ;
void printMats ( DFHack : : Console & con , MatMap & mat , std : : vector < DFHack : : t_matgloss > & materials )
// printMats() accepts a vector of pointers to t_matgloss so that it can
// deal t_matgloss and all subclasses.
void printMats ( DFHack : : Console & con , MatMap & mat ,
std : : vector < DFHack : : t_matgloss * > & materials )
{
unsigned int total = 0 ;
MatSorter sorting_vector ;
@ -49,21 +56,65 @@ void printMats(DFHack::Console & con, MatMap &mat, std::vector<DFHack::t_matglos
{
sorting_vector . push_back ( * it ) ;
}
std : : sort ( sorting_vector . begin ( ) , sorting_vector . end ( ) , compare_pair_second < > ( ) ) ;
for ( MatSorter : : const_iterator it = sorting_vector . begin ( ) ; it ! = sorting_vector . end ( ) ; + + it )
std : : sort ( sorting_vector . begin ( ) , sorting_vector . end ( ) ,
compare_pair_second < > ( ) ) ;
for ( MatSorter : : const_iterator it = sorting_vector . begin ( ) ;
it ! = sorting_vector . end ( ) ; + + it )
{
if ( it - > first > = materials . size ( ) )
{
con < < " Bad index: " < < it - > first < < " out of " < < materials . size ( ) < < endl ;
con < < " Bad index: " < < it - > first < < " out of "
< < materials . size ( ) < < endl ;
continue ;
}
DFHack : : t_matgloss mat = materials [ it - > first ] ;
con < < std : : setw ( 25 ) < < mat . id < < " : " < < it - > second < < std : : endl ;
DFHack : : t_matgloss * mat = materials [ it - > first ] ;
con < < std : : setw ( 25 ) < < mat - > id < < " : " < < it - > second < < std : : endl ;
total + = it - > second ;
}
con < < " >>> TOTAL = " < < total < < std : : endl < < std : : endl ;
}
void printMats ( DFHack : : Console & con , MatMap & mat ,
std : : vector < DFHack : : t_matgloss > & materials )
{
std : : vector < DFHack : : t_matgloss * > ptr_vec ;
TO_PTR_VEC ( materials , ptr_vec ) ;
printMats ( con , mat , ptr_vec ) ;
}
void printVeins ( DFHack : : Console & con , MatMap & mat_map ,
DFHack : : Materials * mats )
{
MatMap ores ;
MatMap gems ;
MatMap rest ;
for ( MatMap : : const_iterator it = mat_map . begin ( ) ; it ! = mat_map . end ( ) ; + + it )
{
DFHack : : t_matglossInorganic & gloss = mats - > inorganic [ it - > first ] ;
if ( gloss . isOre ( ) )
ores [ it - > first ] = it - > second ;
else if ( gloss . isGem ( ) )
gems [ it - > first ] = it - > second ;
else
rest [ it - > first ] = it - > second ;
}
std : : vector < DFHack : : t_matgloss * > ptr_vec ;
TO_PTR_VEC ( mats - > inorganic , ptr_vec ) ;
con < < " Ores: " < < std : : endl ;
printMats ( con , ores , ptr_vec ) ;
con < < " Gems: " < < std : : endl ;
printMats ( con , gems , ptr_vec ) ;
con < < " Other vein stone: " < < std : : endl ;
printMats ( con , rest , ptr_vec ) ;
}
DFhackCExport command_result prospector ( Core * c , vector < string > & parameters ) ;
DFhackCExport const char * plugin_name ( void )
@ -313,11 +364,13 @@ DFhackCExport command_result prospector (DFHack::Core * c, vector <string> & par
con < < std : : setw ( 25 ) < < DFHack : : TileMaterialString [ it - > first ] < < " : " < < it - > second < < std : : endl ;
}
std : : vector < t_matgloss * > ptr_vec ;
TO_PTR_VEC ( mats - > inorganic , ptr_vec ) ;
con < < std : : endl < < " Layer materials: " < < std : : endl ;
printMats ( con , layerMats , mats - > inorganic ) ;
printMats ( con , layerMats , ptr_ve c) ;
con < < " Vein materials: " < < std : : endl ;
printMats ( con , veinMats , mats - > inorganic ) ;
printVeins ( con , veinMats , mats ) ;
if ( showPlants )
{