summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/losparam.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/losparam.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/losparam.cc')
-rw-r--r--crawl-ref/source/losparam.cc113
1 files changed, 14 insertions, 99 deletions
diff --git a/crawl-ref/source/losparam.cc b/crawl-ref/source/losparam.cc
index 47c995f5bd..f24acf4551 100644
--- a/crawl-ref/source/losparam.cc
+++ b/crawl-ref/source/losparam.cc
@@ -14,7 +14,7 @@ REVISION("$Rev$");
#include "stuff.h"
#include "terrain.h"
-opacity_type opc_default(const coord_def& p)
+opacity_type opacity_default::operator()(const coord_def& p) const
{
int m;
dungeon_feature_type f = env.grid(p);
@@ -30,117 +30,32 @@ opacity_type opc_default(const coord_def& p)
return OPC_CLEAR;
}
-bool bounds_los_radius(const coord_def& p)
-{
- return (p.abs() <= get_los_radius_squared());
-}
-
-/* los_param_trans */
-
-los_param_trans::los_param_trans(const coord_def& c)
- : center(c)
-{
-}
-
-coord_def los_param_trans::trans(const coord_def& p) const
-{
- return (p + center);
-}
-
-bool los_param_trans::los_bounds(const coord_def& p) const
-{
- return (map_bounds(trans(p)) && p.abs() <= get_los_radius_squared());
-}
-
-
-/* los_param_permissive */
-
-los_param_permissive::los_param_permissive(const coord_def& c)
- : los_param_trans(c)
-{
-}
-
-unsigned los_param_permissive::appearance(const coord_def& p) const
-{
- return env.grid(trans(p));
-}
-
-opacity_type los_param_permissive::opacity(const coord_def& p) const
-{
- return OPC_CLEAR;
-}
-
-
-/* los_param_nocloud */
-
-los_param_nocloud::los_param_nocloud(const coord_def& c)
- : los_param_trans(c)
-{
-}
-
-dungeon_feature_type los_param_nocloud::feature(const coord_def& p) const
-{
- return env.grid(trans(p));
-}
-
-unsigned los_param_nocloud::appearance(const coord_def& p) const
-{
- return grid_appearance(trans(p));
-}
-
-opacity_type los_param_nocloud::opacity(const coord_def& p) const
-{
- dungeon_feature_type f = feature(p);
- if (grid_is_opaque(f))
- return OPC_OPAQUE;
- else
- return OPC_CLEAR;
-}
-
-
-/* los_param_base */
-
-los_param_base::los_param_base(const coord_def& c)
- : los_param_nocloud(c)
-{
-}
-
-unsigned short los_param_base::cloud_idx(const coord_def& p) const
-{
- return env.cgrid(trans(p));
-}
-
-opacity_type los_param_base::opacity(const coord_def& p) const
+// Make anything solid block in addition to normal LOS.
+// XXX: Are trees, bushes solid?
+opacity_type opacity_solid::operator()(const coord_def& p) const
{
int m;
- dungeon_feature_type f = feature(p);
- if (grid_is_opaque(f))
+ dungeon_feature_type f = env.grid(p);
+ if (grid_is_solid(f))
return OPC_OPAQUE;
- else if (is_opaque_cloud(cloud_idx(p)))
+ else if (is_opaque_cloud(env.cgrid(p)))
return OPC_HALF;
else if (f == DNGN_TREES)
return OPC_HALF;
- else if ((m = mgrd(trans(p))) != NON_MONSTER && menv[m].type == MONS_BUSH)
+ else if ((m = mgrd(p)) != NON_MONSTER && menv[m].type == MONS_BUSH)
return OPC_HALF;
else
return OPC_CLEAR;
}
-
-/* los_param_solid */
-
-los_param_solid::los_param_solid(const coord_def& c)
- : los_param_base(c)
+// LOS bounded by fixed presquared radius.
+bool bounds_radius_sq::operator()(const coord_def& p) const
{
+ return (p.abs() <= radius_sq);
}
-opacity_type los_param_solid::opacity(const coord_def& p) const
+// LOS bounded by current global LOS radius.
+bool bounds_los_radius::operator()(const coord_def& p) const
{
- dungeon_feature_type f = feature(p);
- if (grid_is_solid(f))
- return OPC_OPAQUE;
- else if (is_opaque_cloud(cloud_idx(p)))
- return OPC_HALF;
- else
- return OPC_CLEAR;
+ return (p.abs() <= get_los_radius_squared());
}