From 47173f1092b4f4f3bdc0da19d6dc4553f62cdee7 Mon Sep 17 00:00:00 2001 From: zelgadis Date: Thu, 6 Dec 2007 09:54:50 +0000 Subject: "?/" can now be used to look up items. A side effect of this is that item descriptions have been moved to dat/descript/items.txt and dat/descript/unident.txt. STL maps are now used to look up exact matches for the names of monsters, features and spells, so that looking them up with "?/" won't get too slow if there's a large descriptions DB and each key has to be tested if its a monster/spell/etc. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3009 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/terrain.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'crawl-ref/source/terrain.cc') diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc index fd0a9e0ff6..79e10609ae 100644 --- a/crawl-ref/source/terrain.cc +++ b/crawl-ref/source/terrain.cc @@ -16,6 +16,7 @@ #include "terrain.h" #include "dgnevent.h" +#include "direct.h" #include "itemprop.h" #include "items.h" #include "message.h" @@ -554,3 +555,33 @@ bool fall_into_a_pool( int entry_x, int entry_y, bool allow_shift, return (false); } // end fall_into_a_pool() +typedef std::map feat_desc_map; +static feat_desc_map feat_desc_cache; + +void init_feat_desc_cache() +{ + for (int i = 0; i < NUM_FEATURES; i++) + { + dungeon_feature_type grid = static_cast(i); + std::string desc = feature_description(grid); + + lowercase(desc); + if (feat_desc_cache.find(desc) == feat_desc_cache.end()) + feat_desc_cache[desc] = grid; + } +} + +dungeon_feature_type feat_by_desc(std::string desc) +{ + lowercase(desc); + + if (desc[desc.size() - 1] != '.') + desc += "."; + + feat_desc_map::iterator i = feat_desc_cache.find(desc); + + if (i != feat_desc_cache.end()) + return (i->second); + + return (DNGN_UNSEEN); +} -- cgit v1.2.3-54-g00ecf