diff options
author | Robert Vollmert <rvollmert@gmx.net> | 2009-11-11 14:57:35 +0100 |
---|---|---|
committer | Robert Vollmert <rvollmert@gmx.net> | 2009-11-11 16:26:20 +0100 |
commit | f7b29b81395faf8ecbda4355bc85ef5619c7bd99 (patch) | |
tree | f3ad921bd794e7caf945cb57a61ea75f0a12f922 /crawl-ref/source/actor-los.cc | |
parent | 4aebd25253db6f9509aa1ead548807abc3dbc5c3 (diff) | |
download | crawl-ref-f7b29b81395faf8ecbda4355bc85ef5619c7bd99.tar.gz crawl-ref-f7b29b81395faf8ecbda4355bc85ef5619c7bd99.zip |
Implement monster_iterator.
monster_iterator allows iterating over live monsters in
env.mgrid, possibly subject to some location/visibility
restrictions.
Possible restrictions:
- within some radius (circle_def::contains(mon->pos())
- position inside some LOS (los_def::see_cell(mon->pos())
- visible to some actor (actor::can_see(mon))
Sample use:
for (int i = 0; i < MAX_MONSTERS; ++i)
{
monsters* const monster = &menv[i];
if (!monster->alive())
continue;
// ...
// becomes
for (monster_iterator mi; mi; ++mi)
{
// ..., replacing monster-> by mi->
// and monster by *mi
If you were checking for mons_near(monster), use
monster_iterator mi(&you.get_los());
if you were checking for you.can_see(monster), use
monster_iterator mi(&you);
if you were checking for
(monster->pos()-you.pos()).abs() <= r*r+1, use
monster_iterator mi(circle_def(you.pos(), r, C_ROUND)).
This is not as general as one might hope, but it should
allow reducing the amount of code that knows how monsters
are stored.
Diffstat (limited to 'crawl-ref/source/actor-los.cc')
0 files changed, 0 insertions, 0 deletions