git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@569 c06c8d41-db1a-0410-9941-cceddc491573
GACH6PWPGGUBEE7PFEPQMOZKSR7HTQGL2WLGF2AQPJD3FCCSKZNQC 43ZTEB57FU7KE5EVMYWZONNVJBZCGF3JEAJZIY25LC4LGE65PG5QC PJDC24L7LXX6NZ7J5P7MNJJHAKQDJQEBV4CMDR4VSXLMWRIBMNKQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC PTB7I4WQ3NTF7BE3O6WKXDSJD6QRWSZIEWPBSZGCJJZVNKT4OL5AC 5ASC3STDYCNLZFEBN6UTMUCGDETHBR2OCBZCF5VIAZ5RRWLOTDYQC std::map<branch_type, level_id> stair_level;std::map<level_pos, shop_type> shops_present;std::map<level_pos, god_type> altars_present;std::map<level_pos, portal_type> portals_present;
typedef std::map<branch_type, level_id> stair_map_type;typedef std::map<level_pos, shop_type> shop_map_type;typedef std::map<level_pos, god_type> altar_map_type;typedef std::map<level_pos, portal_type> portal_map_type;stair_map_type stair_level;shop_map_type shops_present;altar_map_type altars_present;portal_map_type portals_present;
}static int portal_to_feature(portal_type p){switch ( p ){case PORTAL_LABYRINTH:return DNGN_ENTER_LABYRINTH;case PORTAL_HELL:return DNGN_ENTER_HELL;case PORTAL_ABYSS:return DNGN_ENTER_ABYSS;case PORTAL_PANDEMONIUM:return DNGN_ENTER_PANDEMONIUM;default:return DNGN_FLOOR;}
static altar_map_type get_notable_altars(const altar_map_type &altars){altar_map_type notable_altars;for ( altar_map_type::const_iterator na_iter = altars.begin();na_iter != altars.end(); ++na_iter ){if (na_iter->first.id.branch != BRANCH_ECUMENICAL_TEMPLE)notable_altars[na_iter->first] = na_iter->second;}return (notable_altars);}inline static std::string place_desc(const level_pos &pos){return "[" + pos.id.describe(false, true) + "] ";}inline static std::string altar_description(god_type god){return feature_description( altar_for_god(god) );}inline static std::string portal_description(portal_type portal){return feature_description( portal_to_feature(portal) );}static void get_matching_altars(const base_pattern &pattern, std::vector<stash_search_result> &results){for ( altar_map_type::const_iterator na_iter = altars_present.begin();na_iter != altars_present.end(); ++na_iter ){const std::string adesc =altar_description(na_iter->second);if (pattern.matches(place_desc(na_iter->first) + adesc)){stash_search_result sr;sr.pos = na_iter->first;sr.match = adesc;results.push_back(sr);}}}static void get_matching_portals(const base_pattern &pattern, std::vector<stash_search_result> &results){for ( portal_map_type::const_iterator pl_iter = portals_present.begin();pl_iter != portals_present.end(); ++pl_iter ){const std::string desc =portal_description(pl_iter->second);if (pattern.matches(place_desc(pl_iter->first) + desc + " [portal]")){stash_search_result sr;sr.pos = pl_iter->first;sr.match = desc;results.push_back(sr);}}}void get_matching_features(const base_pattern &pattern, std::vector<stash_search_result> &results){if (!pattern.valid())return;get_matching_altars(pattern, results);get_matching_portals(pattern, results);}
// no point in recording Temple altarsif ( you.where_are_you == BRANCH_ECUMENICAL_TEMPLE )return;// portable; no point in recordingif ( god == GOD_NEMELEX_XOBEH )return;
}void unnotice_altar(){const coord_def pos = { you.x_pos, you.y_pos };const level_pos curpos(level_id::get_current_level_id(), pos);// Hmm, what happens when erasing a nonexistent key directly?if (altars_present.find(curpos) != altars_present.end())altars_present.erase(curpos);