diff options
author | Robert Burnham <burnhamrobertp@gmail.com> | 2011-04-26 08:47:05 -0500 |
---|---|---|
committer | Robert Burnham <burnhamrobertp@gmail.com> | 2011-04-26 08:47:05 -0500 |
commit | 809ea63fb87708fcb763492e2da99188679ed0f4 (patch) | |
tree | de25799e8538d30d4eb5dcfa37a7bc328ea491c3 /crawl-ref/source/exclude.cc | |
parent | 77b621a0ace27951fc2f24ab357f69430bcbfd67 (diff) | |
parent | 96f00b85b9271dade59c577353651eca1e88e0cd (diff) | |
download | crawl-ref-809ea63fb87708fcb763492e2da99188679ed0f4.tar.gz crawl-ref-809ea63fb87708fcb763492e2da99188679ed0f4.zip |
Merge branch 'master' into unified_combat_control
Conflicts:
crawl-ref/source/actor.cc
crawl-ref/source/delay.cc
crawl-ref/source/directn.cc
crawl-ref/source/directn.h
crawl-ref/source/fight.cc
crawl-ref/source/files.cc
crawl-ref/source/mon-act.cc
crawl-ref/source/monster.cc
crawl-ref/source/mpr.h
crawl-ref/source/player.cc
crawl-ref/source/shopping.cc
Diffstat (limited to 'crawl-ref/source/exclude.cc')
-rw-r--r-- | crawl-ref/source/exclude.cc | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/crawl-ref/source/exclude.cc b/crawl-ref/source/exclude.cc index 5f457b9b12..4f08ceedb9 100644 --- a/crawl-ref/source/exclude.cc +++ b/crawl-ref/source/exclude.cc @@ -1,7 +1,7 @@ -/* - * File: exclude.cc - * Summary: Code related to travel exclusions. - */ +/** + * @file + * @brief Code related to travel exclusions. +**/ #include "AppHdr.h" @@ -455,12 +455,31 @@ void clear_excludes() _exclude_update(); } +static void _exclude_gate(const coord_def &p, bool del = false) +{ + std::set<coord_def> all_doors; + find_connected_identical(p, grd(p), all_doors); + for (std::set<coord_def>::const_iterator dc = all_doors.begin(); + dc != all_doors.end(); ++dc) + { + if (del) + del_exclude(*dc); + else + set_exclude(*dc, 0); + } +} + // Cycles the radius of an exclusion, including "off" state; // may start at 0 < radius < LOS_RADIUS, but won't cycle there. void cycle_exclude_radius(const coord_def &p) { if (travel_exclude *exc = curr_excludes.get_exclude_root(p)) { + if (feat_is_door(grd(p))) + { + _exclude_gate(p, exc->radius == 0); + return; + } if (exc->radius > 0) set_exclude(p, 0); else |