summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/exclude.cc
diff options
context:
space:
mode:
authorRobert Burnham <burnhamrobertp@gmail.com>2011-04-26 08:47:05 -0500
committerRobert Burnham <burnhamrobertp@gmail.com>2011-04-26 08:47:05 -0500
commit809ea63fb87708fcb763492e2da99188679ed0f4 (patch)
treede25799e8538d30d4eb5dcfa37a7bc328ea491c3 /crawl-ref/source/exclude.cc
parent77b621a0ace27951fc2f24ab357f69430bcbfd67 (diff)
parent96f00b85b9271dade59c577353651eca1e88e0cd (diff)
downloadcrawl-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.cc27
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