summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/actor-los.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2010-03-22 11:16:21 +0100
committerRobert Vollmert <rvollmert@gmx.net>2010-03-22 18:49:33 +0100
commitf076dba08f371e3949cac9e25bc3d57cbe09a133 (patch)
tree5bae121339342f2052f3cfcca04d47b4cb7ecd7a /crawl-ref/source/actor-los.cc
parentdea589d649ce656f83f31d3333ba61cb7b4194cb (diff)
downloadcrawl-ref-f076dba08f371e3949cac9e25bc3d57cbe09a133.tar.gz
crawl-ref-f076dba08f371e3949cac9e25bc3d57cbe09a133.zip
Update actor::get_los to use global LOS.
This is all not very nice. los_base is now an abstract base class for both los_def and los_glob (global LOS-backed los_def variant), and interators now take a *los_base. actor::update_los is gone. Arena LOS is quite probably broken again at the moment.
Diffstat (limited to 'crawl-ref/source/actor-los.cc')
-rw-r--r--crawl-ref/source/actor-los.cc44
1 files changed, 8 insertions, 36 deletions
diff --git a/crawl-ref/source/actor-los.cc b/crawl-ref/source/actor-los.cc
index 45e7567d09..37b3e41c00 100644
--- a/crawl-ref/source/actor-los.cc
+++ b/crawl-ref/source/actor-los.cc
@@ -18,27 +18,12 @@ bool actor::see_cell(const coord_def &p) const
return (cell_see_cell(pos(), p, LOS_DEFAULT));
}
-void actor::update_los()
-{
- // Optimization to prevent updating every monster's LOS
- // every turn. Monsters may have incorrect LOS if opacities
- // change without the monster moving (e.g. digging, doors
- // opening/closing, smoke appearing/disappearing).
- if (changed_los_center
- || distance(you.pos(), pos()) <= LOS_MAX_RADIUS_SQ
- || observable()) // arena
- {
- los.update();
- changed_los_center = false;
- }
-}
-
bool actor::can_see(const actor *target) const
{
return (target->visible_to(this) && see_cell(target->pos()));
}
-bool player::see_cell_no_trans(const coord_def &p) const
+bool actor::see_cell_no_trans(const coord_def &p) const
{
return (cell_see_cell(pos(), p, LOS_NO_TRANS));
}
@@ -48,36 +33,23 @@ bool player::trans_wall_blocking(const coord_def &p) const
return (see_cell(p) && !see_cell_no_trans(p));
}
-const los_def& actor::get_los() const
-{
- return (los);
-}
-
-const los_def& actor::get_los_no_trans()
-{
- return (los_no_trans);
-}
-
-const los_def& monsters::get_los_no_trans()
+const los_base* actor::get_los()
{
- los_no_trans.update();
- return (los_no_trans);
+ los = los_glob(pos(), LOS_DEFAULT);
+ return (&los);
}
-void player::update_los()
+const los_base* actor::get_los_no_trans()
{
- if (!crawl_state.game_is_arena() || !crawl_state.arena_suspended)
- {
- los_no_trans.update();
- actor::update_los();
- }
+ los_no_trans = los_glob(pos(), LOS_NO_TRANS);
+ return (&los_no_trans);
}
// Player LOS overrides for arena.
void player::set_arena_los(const coord_def& c)
{
- los.init_arena(c);
+ // XXX: update
}
bool player::can_see(const actor* a) const