diff options
Diffstat (limited to 'crawl-ref/source/stuff.cc')
-rw-r--r-- | crawl-ref/source/stuff.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/crawl-ref/source/stuff.cc b/crawl-ref/source/stuff.cc index f7cd439ae1..27e40476ce 100644 --- a/crawl-ref/source/stuff.cc +++ b/crawl-ref/source/stuff.cc @@ -1081,3 +1081,66 @@ int coord_def::distance_from(const coord_def &other) const return (grid_distance(x, y, other.x, other.y)); } +////////////////////////////////////////////////////////////////////////// +// crawl_environment + +void crawl_environment::add_marker(map_marker *marker) +{ + markers.insert(dgn_pos_marker(marker->pos, marker)); +} + +void crawl_environment::remove_marker(map_marker *marker) +{ + std::pair<dgn_marker_map::iterator, dgn_marker_map::iterator> + els = markers.equal_range(marker->pos); + for (dgn_marker_map::iterator i = els.first; i != els.second; ++i) + { + if (i->second == marker) + { + markers.erase(i); + break; + } + } + delete marker; +} + +void crawl_environment::remove_markers_at(const coord_def &c) +{ + std::pair<dgn_marker_map::iterator, dgn_marker_map::iterator> + els = markers.equal_range(c); + for (dgn_marker_map::iterator i = els.first; i != els.second; ) + { + dgn_marker_map::iterator todel = i++; + delete todel->second; + markers.erase(todel); + } +} + +map_marker *crawl_environment::find_marker(const coord_def &c, + map_marker_type type) const +{ + std::pair<dgn_marker_map::const_iterator, dgn_marker_map::const_iterator> + els = markers.equal_range(c); + for (dgn_marker_map::const_iterator i = els.first; i != els.second; ) + if (type == MAT_ANY || i->second->get_type() == type) + return (i->second); + return (NULL); +} + +std::vector<map_marker*> crawl_environment::get_markers(const coord_def &c) + const +{ + std::pair<dgn_marker_map::const_iterator, dgn_marker_map::const_iterator> + els = markers.equal_range(c); + std::vector<map_marker*> rmarkers; + for (dgn_marker_map::const_iterator i = els.first; i != els.second; ) + rmarkers.push_back(i->second); + return (rmarkers); +} + +void crawl_environment::clear_markers() +{ + for (dgn_marker_map::iterator i = markers.begin(); i != markers.end(); ++i) + delete i->second; + markers.clear(); +} |