summaryrefslogtreecommitdiff
path: root/plugins/prospector.cpp
diff options
context:
space:
mode:
authorPetr Mrázek2012-03-03 23:18:12 +0100
committerPetr Mrázek2012-03-03 23:18:12 +0100
commitd33e9a9770f5a14dcc213e82182cedb7fc94c0a5 (patch)
treee172b7863cf610fe76ee52b592a1a932269edd2d /plugins/prospector.cpp
parent7fe8762852c11caeaeb486e9b76f024f5cbaf0d6 (diff)
downloaddfhack-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.cpp38
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)