diff options
author | Robert Vollmert <rvollmert@gmx.net> | 2010-03-22 11:16:21 +0100 |
---|---|---|
committer | Robert Vollmert <rvollmert@gmx.net> | 2010-03-22 18:49:33 +0100 |
commit | f076dba08f371e3949cac9e25bc3d57cbe09a133 (patch) | |
tree | 5bae121339342f2052f3cfcca04d47b4cb7ecd7a /crawl-ref/source/actor-los.cc | |
parent | dea589d649ce656f83f31d3333ba61cb7b4194cb (diff) | |
download | crawl-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.cc | 44 |
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 |