diff options
| author | Petr Mrázek | 2012-03-03 23:18:12 +0100 |
|---|---|---|
| committer | Petr Mrázek | 2012-03-03 23:18:12 +0100 |
| commit | d33e9a9770f5a14dcc213e82182cedb7fc94c0a5 (patch) | |
| tree | e172b7863cf610fe76ee52b592a1a932269edd2d /plugins/prospector.cpp | |
| parent | 7fe8762852c11caeaeb486e9b76f024f5cbaf0d6 (diff) | |
| download | dfhack-d33e9a9770f5a14dcc213e82182cedb7fc94c0a5.tar.gz dfhack-d33e9a9770f5a14dcc213e82182cedb7fc94c0a5.tar.bz2 dfhack-d33e9a9770f5a14dcc213e82182cedb7fc94c0a5.tar.xz | |
Sort layer materials in prospector by depth.
Diffstat (limited to 'plugins/prospector.cpp')
| -rw-r--r-- | plugins/prospector.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/plugins/prospector.cpp b/plugins/prospector.cpp index a52ef756..91f0c446 100644 --- a/plugins/prospector.cpp +++ b/plugins/prospector.cpp @@ -76,6 +76,18 @@ bool operator>(const matdata & q1, const matdata & q2) return q1.count > q2.count; } +template<typename _Tp = matdata > +struct shallower : public binary_function<_Tp, _Tp, bool> +{ + bool operator()(const _Tp& top, const _Tp& bottom) const + { + float topavg = (top.lower_z + top.upper_z)/2.0f; + float btmavg = (bottom.lower_z + bottom.upper_z)/2.0f; + return topavg > btmavg; + } +}; + + typedef std::map<int16_t, matdata> MatMap; typedef std::vector< pair<int16_t, matdata> > MatSorter; @@ -90,10 +102,10 @@ template<template <typename> class P = std::greater > struct compare_pair_second { template<class T1, class T2> - bool operator()(const std::pair<T1, T2>& left, const std::pair<T1, T2>& right) - { - return P<T2>()(left.second, right.second); - } + bool operator()(const std::pair<T1, T2>& left, const std::pair<T1, T2>& right) + { + return P<T2>()(left.second, right.second); + } }; static void printMatdata(DFHack::Console & con, const matdata &data) @@ -116,7 +128,7 @@ static int getValue(const df::plant_raw &info) return info.value; } -template <typename T> +template <typename T, template <typename> class P> void printMats(DFHack::Console & con, MatMap &mat, std::vector<T*> &materials, bool show_value) { unsigned int total = 0; @@ -126,7 +138,7 @@ void printMats(DFHack::Console & con, MatMap &mat, std::vector<T*> &materials, b sorting_vector.push_back(*it); } std::sort(sorting_vector.begin(), sorting_vector.end(), - compare_pair_second<>()); + compare_pair_second<P>()); for (MatSorter::const_iterator it = sorting_vector.begin(); it != sorting_vector.end(); ++it) { @@ -168,13 +180,13 @@ void printVeins(DFHack::Console & con, MatMap &mat_map, } con << "Ores:" << std::endl; - printMats(con, ores, world->raws.inorganics, show_value); + printMats<df::inorganic_raw, std::greater>(con, ores, world->raws.inorganics, show_value); con << "Gems:" << std::endl; - printMats(con, gems, world->raws.inorganics, show_value); + printMats<df::inorganic_raw, std::greater>(con, gems, world->raws.inorganics, show_value); con << "Other vein stone:" << std::endl; - printMats(con, rest, world->raws.inorganics, show_value); + printMats<df::inorganic_raw, std::greater>(con, rest, world->raws.inorganics, show_value); } command_result prospector (Core * c, vector <string> & parameters); @@ -329,7 +341,7 @@ static command_result embark_prospector(DFHack::Core *c, df::viewscreen_choose_s // Print the report c->con << "Layer materials:" << std::endl; - printMats(c->con, layerMats, world->raws.inorganics, showValue); + printMats<df::inorganic_raw, shallower>(c->con, layerMats, world->raws.inorganics, showValue); if (showHidden) { DFHack::Materials *mats = c->getMaterials(); @@ -588,16 +600,16 @@ command_result prospector (DFHack::Core * c, vector <string> & parameters) } con << std::endl << "Layer materials:" << std::endl; - printMats(con, layerMats, world->raws.inorganics, showValue); + printMats<df::inorganic_raw, shallower>(con, layerMats, world->raws.inorganics, showValue); printVeins(con, veinMats, mats, showValue); if (showPlants) { con << "Shrubs:" << std::endl; - printMats(con, plantMats, world->raws.plants.all, showValue); + printMats<df::plant_raw, std::greater>(con, plantMats, world->raws.plants.all, showValue); con << "Wood in trees:" << std::endl; - printMats(con, treeMats, world->raws.plants.all, showValue); + printMats<df::plant_raw, std::greater>(con, treeMats, world->raws.plants.all, showValue); } if (hasAquifer) |
