summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/travel.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-10-16 18:33:24 +0200
committerRobert Vollmert <rvollmert@gmx.net>2009-10-16 20:17:48 +0200
commitaf4b5015512fab9e409dc8ec4128c6f63ab967c9 (patch)
treefa6f259420e92fcef3f3d0466dfb22ced9c0e0f2 /crawl-ref/source/travel.cc
parent564dac43f50543729d004dc1dfe905e81321837d (diff)
downloadcrawl-ref-af4b5015512fab9e409dc8ec4128c6f63ab967c9.tar.gz
crawl-ref-af4b5015512fab9e409dc8ec4128c6f63ab967c9.zip
Get rid of los_param outside of los.cc/losparam.cc.
The nicer interface to losight is now void losight(env_show_grid& sh, const coord_def& center, const opacity_func &opc = opc_default, const bounds_func &bds = bds_default); bounds_func provides the LOS boundary (usually just a circle with radius the current LOS radius). opacity_func is a mapping of grid coordinates to opacity values.
Diffstat (limited to 'crawl-ref/source/travel.cc')
-rw-r--r--crawl-ref/source/travel.cc48
1 files changed, 15 insertions, 33 deletions
diff --git a/crawl-ref/source/travel.cc b/crawl-ref/source/travel.cc
index 339e5fb298..10c080aa62 100644
--- a/crawl-ref/source/travel.cc
+++ b/crawl-ref/source/travel.cc
@@ -276,42 +276,23 @@ bool is_traversable(dungeon_feature_type grid)
return (traversable_terrain[grid] == TRAVERSABLE);
}
-struct los_param_excl : public los_param_trans
+opacity_type _feat_opacity(dungeon_feature_type feat)
{
- int radius_sq;
-
- los_param_excl(const coord_def& c, int r)
- : los_param_trans(c), radius_sq(r)
- {
- }
-
- bool los_bounds(const coord_def& p) const
- {
- return (p.abs() <= radius_sq &&
- los_param_trans::los_bounds(p));
- }
-
- unsigned appearance(const coord_def& p) const
- {
- return 1;
- }
-
- opacity_type _feat_opacity(dungeon_feature_type feat) const
- {
- return grid_is_opaque(feat) ? OPC_OPAQUE : OPC_CLEAR;
- }
+ return (grid_is_opaque(feat) ? OPC_OPAQUE : OPC_CLEAR);
+}
- // A cell is considered clear unless the player knows it's
- // opaque.
- opacity_type opacity(const coord_def& p) const
+// A cell is considered clear unless the player knows it's
+// opaque.
+struct opacity_excl : opacity_func
+{
+ opacity_type operator()(const coord_def& p) const
{
- const coord_def& q = trans(p);
- if (!is_terrain_seen(q))
+ if (!is_terrain_seen(p))
return OPC_CLEAR;
- else if (!is_terrain_changed(q))
- return _feat_opacity(env.grid(q));
- else if (env.map(q).object < NUM_REAL_FEATURES)
- return _feat_opacity((dungeon_feature_type) env.map(q).object);
+ else if (!is_terrain_changed(p))
+ return _feat_opacity(env.grid(p));
+ else if (env.map(p).object < NUM_REAL_FEATURES)
+ return _feat_opacity((dungeon_feature_type) env.map(p).object);
else
{
// If you have seen monsters, items or clouds there,
@@ -320,6 +301,7 @@ struct los_param_excl : public los_param_trans
}
}
};
+opacity_excl opc_excl;
int travel_exclude::radius_sq() const
{
@@ -328,7 +310,7 @@ int travel_exclude::radius_sq() const
void travel_exclude::set_exclude_show()
{
- losight(show, los_param_excl(pos, radius_sq()));
+ losight(show, pos, opc_excl, bounds_radius_sq(radius_sq()));
uptodate = true;
}