summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-12-01 17:05:18 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-12-01 17:05:18 +0100
commitd2d7df22ac9f15f4f1ef6937d21fe2b16abddd8b (patch)
treed418d9e57ef41503b829aaed8f5a2d7a3b326db7
parent2fa03a5e30c9163d0bb00eb1b3b7905045d3426f (diff)
downloadcrawl-ref-d2d7df22ac9f15f4f1ef6937d21fe2b16abddd8b.tar.gz
crawl-ref-d2d7df22ac9f15f4f1ef6937d21fe2b16abddd8b.zip
Group features in feature list.
-rw-r--r--crawl-ref/source/viewmap.cc58
1 files changed, 44 insertions, 14 deletions
diff --git a/crawl-ref/source/viewmap.cc b/crawl-ref/source/viewmap.cc
index 8bf3161e80..337e220cf9 100644
--- a/crawl-ref/source/viewmap.cc
+++ b/crawl-ref/source/viewmap.cc
@@ -469,9 +469,14 @@ static void _reset_travel_colours(std::vector<coord_def> &features,
class feature_list
{
- std::vector<glyph> data;
+ enum group
+ {
+ G_UP, G_DOWN, G_PORTAL, G_OTHER, G_NONE, NUM_GROUPS = G_NONE
+ };
+
+ std::vector<glyph> data[NUM_GROUPS];
- glyph _get_glyph(const coord_def& gc)
+ glyph get_glyph(const coord_def& gc)
{
// XXX: it's unclear whether we want to display all features
// or just those not obscured by remembered/detected stuff.
@@ -487,41 +492,66 @@ class feature_list
return (g);
}
- bool _show(const coord_def& gc)
+ static group feat_dir(dungeon_feature_type feat)
+ {
+ switch (feat_stair_direction(feat))
+ {
+ case CMD_GO_UPSTAIRS:
+ return G_UP;
+ case CMD_GO_DOWNSTAIRS:
+ return G_DOWN;
+ default:
+ return G_NONE;
+ }
+ }
+
+ group get_group(const coord_def& gc)
{
show_type obj = env.map_knowledge(gc).object;
if (obj != SH_FEATURE)
- return (false);
+ return G_NONE;
+
dungeon_feature_type feat = obj.feat;
- return (feat_is_staircase(feat) || feat_is_trap(feat) ||
- feat_is_altar(feat) || get_feature_dchar(feat) == DCHAR_ARCH);
+
+ if (feat_is_staircase(feat) || feat_is_escape_hatch(feat))
+ return feat_dir(feat);
+ if (feat == DNGN_TRAP_NATURAL)
+ return G_DOWN;
+ if (feat_is_altar(feat) || feat == DNGN_ENTER_SHOP)
+ return G_OTHER;
+ if (get_feature_dchar(feat) == DCHAR_ARCH)
+ return G_PORTAL;
+ return G_NONE;
}
- void _maybe_add(const coord_def& gc)
+ void maybe_add(const coord_def& gc)
{
#ifndef USE_TILE
if (!is_terrain_known(gc))
return;
- if (_show(gc))
- data.push_back(_get_glyph(gc));
+ group grp = get_group(gc);
+ if (grp != G_NONE)
+ data[grp].push_back(get_glyph(gc));
#endif
}
public:
void init()
{
- data.clear();
+ for (unsigned int i = 0; i < NUM_GROUPS; ++i)
+ data[i].clear();
for (rectangle_iterator ri(0); ri; ++ri)
- _maybe_add(*ri);
+ maybe_add(*ri);
}
formatted_string format() const
{
formatted_string s;
- for (unsigned int i = 0; i < data.size(); ++i)
- s.add_glyph(data[i]);
- return (s);
+ for (unsigned int i = 0; i < NUM_GROUPS; ++i)
+ for (unsigned int j = 0; j < data[i].size(); ++j)
+ s.add_glyph(data[i][j]);
+ return s;
}
};