diff options
author | Robert Vollmert <rvollmert@gmx.net> | 2009-10-16 18:33:24 +0200 |
---|---|---|
committer | Robert Vollmert <rvollmert@gmx.net> | 2009-10-16 20:17:48 +0200 |
commit | af4b5015512fab9e409dc8ec4128c6f63ab967c9 (patch) | |
tree | fa6f259420e92fcef3f3d0466dfb22ced9c0e0f2 /crawl-ref/source/losparam.cc | |
parent | 564dac43f50543729d004dc1dfe905e81321837d (diff) | |
download | crawl-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.cc | 113 |
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()); } |