diff options
author | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-07-21 23:48:32 +0530 |
---|---|---|
committer | Darshan Shaligram <dshaligram@users.sourceforge.net> | 2010-07-21 23:51:01 +0530 |
commit | 7e5f8c4843a7715af6df26a51f90b67b286592c0 (patch) | |
tree | e317f7a5aa3bf93f7525b8fab7a2daf6016232be /crawl-ref/source/mapmark.cc | |
parent | 5420269c75e19f5e4b253c8b85dd57ca0d721270 (diff) | |
download | crawl-ref-7e5f8c4843a7715af6df26a51f90b67b286592c0.tar.gz crawl-ref-7e5f8c4843a7715af6df26a51f90b67b286592c0.zip |
Add remove_markers_and_listeners_at to safely remove Lua markers and dungeon listeners from a square.
Diffstat (limited to 'crawl-ref/source/mapmark.cc')
-rw-r--r-- | crawl-ref/source/mapmark.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/crawl-ref/source/mapmark.cc b/crawl-ref/source/mapmark.cc index bccec53e69..c1c390394e 100644 --- a/crawl-ref/source/mapmark.cc +++ b/crawl-ref/source/mapmark.cc @@ -941,3 +941,24 @@ std::vector<map_marker*> find_markers_by_prop( } return (markers); } + +/////////////////////////////////////////////////////////////////// + +// Safely remove all markers and dungeon listeners at the given square. +void remove_markers_and_listeners_at(coord_def p) +{ + // Look for Lua markers on this square that are listening for + // non-positional events, (such as bazaar portals listening for + // turncount changes) and detach them manually from the dungeon + // event dispatcher. + const std::vector<map_marker *> markers = env.markers.get_markers_at(p); + for (int i = 0, size = markers.size(); i < size; ++i) + { + if (markers[i]->get_type() == MAT_LUA_MARKER) + dungeon_events.remove_listener( + dynamic_cast<map_lua_marker*>(markers[i])); + } + + env.markers.remove_markers_at(p); + dungeon_events.clear_listeners_at(p); +} |