diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/being.cpp | 2 | ||||
-rw-r--r-- | src/being.h | 8 | ||||
-rw-r--r-- | src/configuration.cpp | 50 | ||||
-rw-r--r-- | src/configuration.h | 11 | ||||
-rw-r--r-- | src/engine.cpp | 15 | ||||
-rw-r--r-- | src/gui/browserbox.cpp | 5 | ||||
-rw-r--r-- | src/gui/browserbox.h | 10 | ||||
-rw-r--r-- | src/gui/chat.cpp | 26 | ||||
-rw-r--r-- | src/gui/chat.h | 6 | ||||
-rw-r--r-- | src/gui/gccontainer.cpp | 2 | ||||
-rw-r--r-- | src/gui/gccontainer.h | 4 | ||||
-rw-r--r-- | src/gui/minimap.cpp | 2 | ||||
-rw-r--r-- | src/gui/tabbedcontainer.cpp | 3 | ||||
-rw-r--r-- | src/gui/tabbedcontainer.h | 6 | ||||
-rw-r--r-- | src/map.cpp | 21 | ||||
-rw-r--r-- | src/map.h | 6 | ||||
-rw-r--r-- | src/net/network.cpp | 17 | ||||
-rw-r--r-- | src/net/network.h | 4 | ||||
-rw-r--r-- | src/properties.h | 19 | ||||
-rw-r--r-- | src/resources/itemmanager.cpp | 239 | ||||
-rw-r--r-- | src/resources/itemmanager.h | 4 |
22 files changed, 222 insertions, 250 deletions
@@ -1,3 +1,15 @@ +2006-03-24 Björn Steinbrink <B.Steinbrink@gmx.de> + + * src/being.cpp, src/being.h, src/configuration.cpp, + src/configuration.h, src/engine.cpp, src/map.cpp, src/map.h, + src/properties.h, src/gui/browserbox.cpp, src/gui/browserbox.h, + src/gui/chat.cpp, src/gui/chat.h, src/gui/gccontainer.cpp, + src/gui/gccontainer.h, src/gui/minimap.cpp, + src/gui/tabbedcontainer.cpp, src/gui/tabbedcontainer.h, + src/net/network.cpp, src/net/network.h, src/resources/itemmanager.cpp, + src/resources/itemmanager.h: Another bunch of cosmetic cleanups, i.e. + mostly typedefs... + 2006-02-23 Björn Steinbrink <B.Steinbrink@gmx.de> * src/being.cpp, src/being.h, src/beingmanager.cpp, diff --git a/src/being.cpp b/src/being.cpp index 253c2d24..880263af 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -80,7 +80,7 @@ void Being::clearPath() mPath.clear(); } -void Being::setPath(std::list<PATH_NODE> path) +void Being::setPath(const Path &path) { mPath = path; diff --git a/src/being.h b/src/being.h index db6afbb8..6f8e578c 100644 --- a/src/being.h +++ b/src/being.h @@ -48,6 +48,8 @@ struct PATH_NODE unsigned short x; unsigned short y; }; +typedef std::list<PATH_NODE> Path; +typedef Path::iterator PathIterator; class Being : public Sprite { @@ -291,7 +293,7 @@ class Being : public Sprite * Sets the new path for this being. */ void - setPath(std::list<PATH_NODE> path); + setPath(const Path &path); /** * Calculates the offset in the given directions. @@ -304,9 +306,9 @@ class Being : public Sprite Uint16 mWalkSpeed; /**< Walking speed */ Map *mMap; /**< Map on which this being resides */ std::string mName; /**< Name of character */ - Sprites::iterator mSpriteIterator; + SpriteIterator mSpriteIterator; - std::list<PATH_NODE> mPath; + Path mPath; std::string speech; std::string damage; Uint16 hairStyle, hairColor; diff --git a/src/configuration.cpp b/src/configuration.cpp index f961c084..aa63f46c 100644 --- a/src/configuration.cpp +++ b/src/configuration.cpp @@ -62,8 +62,7 @@ void Configuration::init(const std::string &filename) xmlChar *value = xmlGetProp(node, BAD_CAST "value"); if (name && value) { - options[std::string((const char*)name)] = - std::string((const char*)value); + mOptions[(const char*)name] = (const char*)value; } if (name) xmlFree(name); @@ -93,18 +92,16 @@ void Configuration::write() xmlTextWriterStartDocument(writer, NULL, NULL, NULL); xmlTextWriterStartElement(writer, BAD_CAST "configuration"); - std::map<std::string, std::string>::iterator iter; - - for (iter = options.begin(); iter != options.end(); iter++) + for (OptionIterator i = mOptions.begin(); i != mOptions.end(); i++) { logger->log("Configuration::write(%s, \"%s\")", - iter->first.c_str(), iter->second.c_str()); + i->first.c_str(), i->second.c_str()); xmlTextWriterStartElement(writer, BAD_CAST "option"); xmlTextWriterWriteAttribute(writer, - BAD_CAST "name", BAD_CAST iter->first.c_str()); + BAD_CAST "name", BAD_CAST i->first.c_str()); xmlTextWriterWriteAttribute(writer, - BAD_CAST "value", BAD_CAST iter->second.c_str()); + BAD_CAST "value", BAD_CAST i->second.c_str()); xmlTextWriterEndElement(writer); } @@ -115,19 +112,15 @@ void Configuration::write() void Configuration::setValue(const std::string &key, std::string value) { - options[key] = value; + mOptions[key] = value; // Notify listeners - std::map<std::string, std::list<ConfigListener*> >::iterator list = - listeners.find(key); - - if (list != listeners.end()) { - std::list<ConfigListener*>::iterator listener = (*list).second.begin(); - - while (listener != (*list).second.end()) + ListenerMapIterator list = mListenerMap.find(key); + if (list != mListenerMap.end()) { + Listeners listeners = list->second; + for (ListenerIterator i = listeners.begin(); i != listeners.end(); i++) { - (*listener)->optionChanged(key); - listener++; + (*i)->optionChanged(key); } } } @@ -141,33 +134,24 @@ void Configuration::setValue(const std::string &key, float value) std::string Configuration::getValue(const std::string &key, std::string deflt) { - std::map<std::string, std::string>::iterator iter = options.find(key); - return ((iter != options.end()) ? (*iter).second : deflt); + OptionIterator iter = mOptions.find(key); + return ((iter != mOptions.end()) ? iter->second : deflt); } float Configuration::getValue(const std::string &key, float deflt) { - std::map<std::string, std::string>::iterator iter = options.find(key); - return (iter != options.end()) ? atof((*iter).second.c_str()) : deflt; + OptionIterator iter = mOptions.find(key); + return (iter != mOptions.end()) ? atof(iter->second.c_str()) : deflt; } void Configuration::addListener( const std::string &key, ConfigListener *listener) { - listeners[key].push_front(listener); + mListenerMap[key].push_front(listener); } void Configuration::removeListener( const std::string &key, ConfigListener *listener) { - std::list<ConfigListener*>::iterator i = listeners[key].begin(); - - while (i != listeners[key].end()) - { - if ((*i) == listener) { - listeners[key].erase(i); - return; - } - i++; - } + mListenerMap[key].remove(listener); } diff --git a/src/configuration.h b/src/configuration.h index d2f44dca..28246a02 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -94,8 +94,15 @@ class Configuration void removeListener(const std::string &key, ConfigListener *listener); private: - std::map<std::string, std::string> options; - std::map<std::string, std::list<ConfigListener*> > listeners; + typedef std::map<std::string, std::string> Options; + typedef Options::iterator OptionIterator; + Options mOptions; + + typedef std::list<ConfigListener*> Listeners; + typedef Listeners::iterator ListenerIterator; + typedef std::map<std::string, Listeners> ListenerMap; + typedef ListenerMap::iterator ListenerMapIterator; + ListenerMap mListenerMap; std::string mConfigPath; /**< Location of config file */ }; diff --git a/src/engine.cpp b/src/engine.cpp index 879a6b21..76ed7ac9 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -167,7 +167,7 @@ void Engine::logic() { Beings *beings = beingManager->getAll(); // Update beings - Beings::iterator beingIterator = beings->begin(); + BeingIterator beingIterator = beings->begin(); while (beingIterator != beings->end()) { Being *being = (*beingIterator); @@ -232,21 +232,18 @@ void Engine::draw(Graphics *graphics) int mouseTileX = mouseX / 32 + camera_x; int mouseTileY = mouseY / 32 + camera_y; - std::list<PATH_NODE> debugPath = mCurrentMap->findPath( + Path debugPath = mCurrentMap->findPath( player_node->x, player_node->y, mouseTileX, mouseTileY); - while (!debugPath.empty()) + for (PathIterator i = debugPath.begin(); i != debugPath.end(); i++) { - PATH_NODE node = debugPath.front(); - debugPath.pop_front(); - - int squareX = node.x * 32 - map_x + 12; - int squareY = node.y * 32 - map_y + 12; + int squareX = i->x * 32 - map_x + 12; + int squareY = i->y * 32 - map_y + 12; graphics->setColor(gcn::Color(255, 0, 0)); graphics->fillRectangle(gcn::Rectangle(squareX, squareY, 8, 8)); - MetaTile *tile = mCurrentMap->getMetaTile(node.x, node.y); + MetaTile *tile = mCurrentMap->getMetaTile(i->x, i->y); std::stringstream cost; cost << tile->Gcost; diff --git a/src/gui/browserbox.cpp b/src/gui/browserbox.cpp index cbf7c1cc..8a636679 100644 --- a/src/gui/browserbox.cpp +++ b/src/gui/browserbox.cpp @@ -241,11 +241,10 @@ struct MouseOverLinkFunctor void BrowserBox::mousePress(int mx, int my, int button) { - std::vector<BROWSER_LINK>::iterator i; - mouseOverLink.mX = mx; mouseOverLink.mY = my; - i = find_if(mLinks.begin(), mLinks.end(), mouseOverLink); + + LinkIterator i = find_if(mLinks.begin(), mLinks.end(), mouseOverLink); if (i != mLinks.end()) { mLinkHandler->handleLink(i->link); diff --git a/src/gui/browserbox.h b/src/gui/browserbox.h index 2897ee96..c6d8f117 100644 --- a/src/gui/browserbox.h +++ b/src/gui/browserbox.h @@ -143,8 +143,14 @@ class BrowserBox : public gcn::Widget, public gcn::MouseListener }; private: - std::vector<std::string> mTextRows; - std::vector<BROWSER_LINK> mLinks; + typedef std::vector<std::string> TextRows; + typedef TextRows::iterator TextRowIterator; + TextRows mTextRows; + + typedef std::vector<BROWSER_LINK> Links; + typedef Links::iterator LinkIterator; + Links mLinks; + LinkHandler *mLinkHandler; unsigned int mMode; unsigned int mHighMode; diff --git a/src/gui/chat.cpp b/src/gui/chat.cpp index 29fbebfe..28259c77 100644 --- a/src/gui/chat.cpp +++ b/src/gui/chat.cpp @@ -75,7 +75,7 @@ ChatWindow::ChatWindow(const std::string &logfile, Network *network): // Add key listener to chat input to be able to respond to up/down chatInput->addKeyListener(this); - curHist = history.end(); + mCurHist = mHistory.end(); } ChatWindow::~ChatWindow() @@ -199,12 +199,12 @@ ChatWindow::action(const std::string& eventId) if (message.length() > 0) { // If message different from previous, put it in the history - if (history.size() == 0 || message != history.back()) { - history.push_back(message); + if (mHistory.size() == 0 || message != mHistory.back()) { + mHistory.push_back(message); } // Reset history iterator - curHist = history.end(); + mCurHist = mHistory.end(); // Send the message to the server chatSend(player_node->getName().c_str(), message.c_str()); @@ -384,24 +384,24 @@ ChatWindow::const_msg(CHATSKILL act) void ChatWindow::keyPress(const gcn::Key &key) { - if (key.getValue() == key.DOWN && curHist != history.end()) + if (key.getValue() == key.DOWN && mCurHist != mHistory.end()) { // Move forward through the history - std::list<std::string>::iterator prevHist = curHist++; - if (curHist != history.end()) { - chatInput->setText(*curHist); + HistoryIterator prevHist = mCurHist++; + if (mCurHist != mHistory.end()) { + chatInput->setText(*mCurHist); chatInput->setCaretPosition(chatInput->getText().length()); } else { - curHist = prevHist; + mCurHist = prevHist; } } - else if (key.getValue() == key.UP && curHist != history.begin() && - history.size() > 0) + else if (key.getValue() == key.UP && mCurHist != mHistory.begin() && + mHistory.size() > 0) { // Move backward through the history - curHist--; - chatInput->setText(*curHist); + mCurHist--; + chatInput->setText(*mCurHist); chatInput->setCaretPosition(chatInput->getText().length()); } } diff --git a/src/gui/chat.h b/src/gui/chat.h index 63b30db3..b460e4c0 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -218,8 +218,10 @@ class ChatWindow : public Window, public gcn::ActionListener, BrowserBox *textOutput; /**< Text box for displaying chat history */ ScrollArea *scrollArea; /**< Scroll area around text output */ - std::list<std::string> history; /**< Command history */ - std::list<std::string>::iterator curHist; /**< History iterator */ + typedef std::list<std::string> History; + typedef History::iterator HistoryIterator; + History mHistory; /**< Command history */ + HistoryIterator mCurHist; /**< History iterator */ }; extern ChatWindow *chatWindow; diff --git a/src/gui/gccontainer.cpp b/src/gui/gccontainer.cpp index 32e78e48..3b574622 100644 --- a/src/gui/gccontainer.cpp +++ b/src/gui/gccontainer.cpp @@ -25,7 +25,7 @@ GCContainer::~GCContainer() { - std::list<gcn::Widget*>::iterator i = mDeathList.begin(); + WidgetIterator i = mDeathList.begin(); while (i != mDeathList.end()) { /* Take care _not_ to modify the list in our _announceDeath method */ diff --git a/src/gui/gccontainer.h b/src/gui/gccontainer.h index 696aef0c..46ebfefa 100644 --- a/src/gui/gccontainer.h +++ b/src/gui/gccontainer.h @@ -37,7 +37,9 @@ class GCContainer : public gcn::Container virtual void _announceDeath(gcn::Widget *w); protected: - std::list<gcn::Widget*> mDeathList; + typedef std::list<gcn::Widget*> Widgets; + typedef Widgets::iterator WidgetIterator; + Widgets mDeathList; }; #endif diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp index e19a8c62..d0c52b11 100644 --- a/src/gui/minimap.cpp +++ b/src/gui/minimap.cpp @@ -77,7 +77,7 @@ void Minimap::draw(gcn::Graphics *graphics) } Beings *beings = beingManager->getAll(); - Beings::iterator bi; + BeingIterator bi; for (bi = beings->begin(); bi != beings->end(); bi++) { diff --git a/src/gui/tabbedcontainer.cpp b/src/gui/tabbedcontainer.cpp index 75977571..3d08b390 100644 --- a/src/gui/tabbedcontainer.cpp +++ b/src/gui/tabbedcontainer.cpp @@ -37,8 +37,7 @@ TabbedContainer::TabbedContainer(): TabbedContainer::~TabbedContainer() { - std::vector<gcn::Widget*>::iterator i = mTabs.begin(); - for (i = mTabs.begin(); i != mTabs.end(); i++) { + for (WidgetIterator i = mTabs.begin(); i != mTabs.end(); i++) { remove(*i); delete (*i); } diff --git a/src/gui/tabbedcontainer.h b/src/gui/tabbedcontainer.h index 89c10c1c..24c8c425 100644 --- a/src/gui/tabbedcontainer.h +++ b/src/gui/tabbedcontainer.h @@ -48,8 +48,10 @@ class TabbedContainer : public gcn::Container, public gcn::ActionListener void setOpaque(bool opaque); private: - std::vector<gcn::Widget*> mTabs; // The actual tabs at the top - std::vector<gcn::Widget*> mContents; // The contents of the tabs + typedef std::vector<gcn::Widget*> Widgets; + typedef Widgets::iterator WidgetIterator; + Widgets mTabs; // The actual tabs at the top + Widgets mContents; // The contents of the tabs Widget *mActiveContent; }; diff --git a/src/map.cpp b/src/map.cpp index d249426a..33e399d7 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -70,8 +70,7 @@ Map::~Map() delete[] tiles; // Clean up tilesets - Tilesets::iterator i; - for (i = tilesets.begin(); i != tilesets.end(); i++) + for (TilesetIterator i = tilesets.begin(); i != tilesets.end(); i++) { delete (*i); } @@ -109,7 +108,7 @@ Map::draw(Graphics *graphics, int scrollX, int scrollY, int layer) int endY = (graphics->getHeight() + scrollY + 31) / 32; // If drawing the fringe layer, make sure sprites are sorted - Sprites::iterator si; + SpriteIterator si; if (layer == 1) { mSprites.sort(spriteCompare); @@ -189,10 +188,9 @@ class ContainsGidFunctor Tileset* Map::getTilesetWithGid(int gid) { - Tilesets::iterator i; - containsGid.gid = gid; - i = find_if(tilesets.begin(), tilesets.end(), containsGid); + + TilesetIterator i = find_if(tilesets.begin(), tilesets.end(), containsGid); return (i == tilesets.end()) ? NULL : *i; } @@ -225,8 +223,7 @@ Map::getWalk(int x, int y) // Check for collision with a being Beings *beings = beingManager->getAll(); - Beings::iterator i; - for (i = beings->begin(); i != beings->end(); i++) { + for (BeingIterator i = beings->begin(); i != beings->end(); i++) { // job 45 is a portal, they don't collide if ((*i)->x == x && (*i)->y == y && (*i)->job != 45) { return false; @@ -266,7 +263,7 @@ Map::getMetaTile(int x, int y) return &metaTiles[x + y * mWidth]; } -Sprites::iterator +SpriteIterator Map::addSprite(Sprite *sprite) { mSprites.push_front(sprite); @@ -274,16 +271,16 @@ Map::addSprite(Sprite *sprite) } void -Map::removeSprite(Sprites::iterator iterator) +Map::removeSprite(SpriteIterator iterator) { mSprites.erase(iterator); } -std::list<PATH_NODE> +Path Map::findPath(int startX, int startY, int destX, int destY) { // Path to be built up (empty by default) - std::list<PATH_NODE> path; + Path path; // Declare open list, a list with open tiles sorted on F cost std::priority_queue<Location> openList; @@ -37,7 +37,9 @@ class Sprite; struct PATH_NODE; typedef std::vector<Tileset*> Tilesets; +typedef Tilesets::iterator TilesetIterator; typedef std::list<Sprite*> Sprites; +typedef Sprites::iterator SpriteIterator; /** * A meta tile stores additional information about a location on a tile map. @@ -163,14 +165,14 @@ class Map : public Properties /** * Adds a sprite to the map. */ - Sprites::iterator + SpriteIterator addSprite(Sprite *sprite); /** * Removes a sprite from the map. */ void - removeSprite(Sprites::iterator iterator); + removeSprite(SpriteIterator iterator); private: /** diff --git a/src/net/network.cpp b/src/net/network.cpp index 9e6f6621..366d07d9 100644 --- a/src/net/network.cpp +++ b/src/net/network.cpp @@ -182,17 +182,9 @@ void Network::registerHandler(MessageHandler *handler) void Network::unregisterHandler(MessageHandler *handler) { - const Uint16 *i = handler->handledMessages; - - while(*i) + for (const Uint16 *i = handler->handledMessages; *i; i++) { - std::map<Uint16, MessageHandler*>::iterator iter; - iter = mMessageHandlers.find(*i); - if (iter != mMessageHandlers.end()) - { - mMessageHandlers.erase(iter); - } - i++; + mMessageHandlers.erase(*i); } handler->setNetwork(0); @@ -200,7 +192,7 @@ void Network::unregisterHandler(MessageHandler *handler) void Network::clearHandlers() { - std::map<Uint16, MessageHandler*>::iterator i; + MessageHandlerIterator i; for (i = mMessageHandlers.begin(); i != mMessageHandlers.end(); i++) { i->second->setNetwork(0); @@ -214,8 +206,7 @@ void Network::dispatchMessages() { MessageIn msg = getNextMessage(); - std::map<Uint16, MessageHandler*>::iterator iter; - iter = mMessageHandlers.find(msg.getId()); + MessageHandlerIterator iter = mMessageHandlers.find(msg.getId()); if (iter != mMessageHandlers.end()) iter->second->handleMessage(&msg); diff --git a/src/net/network.h b/src/net/network.h index 06abc445..f4637f73 100644 --- a/src/net/network.h +++ b/src/net/network.h @@ -89,7 +89,9 @@ class Network SDL_Thread *mWorkerThread; SDL_mutex *mMutex; - std::map<Uint16, MessageHandler*> mMessageHandlers; + typedef std::map<Uint16, MessageHandler*> MessageHandlers; + typedef MessageHandlers::iterator MessageHandlerIterator; + MessageHandlers mMessageHandlers; bool realConnect(); void receive(); diff --git a/src/properties.h b/src/properties.h index ccf8cd00..92690cd3 100644 --- a/src/properties.h +++ b/src/properties.h @@ -46,17 +46,9 @@ class Properties getProperty(const std::string &name) { const static std::string undefined = ""; - std::map<std::string, std::string>::const_iterator i = - properties.find(name); + PropertyMap::const_iterator i = mProperties.find(name); - if (i != properties.end()) - { - return (*i).second; - } - else - { - return undefined; - } + return (i != mProperties.end()) ? i->second : undefined; } /** @@ -65,7 +57,7 @@ class Properties bool hasProperty(const std::string &name) { - return (properties.find(name) != properties.end()); + return (mProperties.find(name) != mProperties.end()); } /** @@ -74,11 +66,12 @@ class Properties void setProperty(const std::string &name, const std::string &value) { - properties[name] = value; + mProperties[name] = value; } private: - std::map<std::string, std::string> properties; + typedef std::map<std::string, std::string> PropertyMap; + PropertyMap mProperties; }; #endif diff --git a/src/resources/itemmanager.cpp b/src/resources/itemmanager.cpp index 59767e8e..994f11b9 100644 --- a/src/resources/itemmanager.cpp +++ b/src/resources/itemmanager.cpp @@ -29,8 +29,18 @@ #include "../log.h" +#define READ_PROP(node, prop, name, target, cast) \ + prop = xmlGetProp(node, BAD_CAST name); \ + if (prop) { \ + target = cast((const char*)prop); \ + xmlFree(prop); \ + } + ItemManager::ItemManager() { + unknown = new ItemInfo(); + unknown->setName("Unknown item"); + ResourceManager *resman = ResourceManager::getInstance(); int size; char *data = (char*)resman->loadFile("items.xml", size); @@ -42,146 +52,114 @@ ItemManager::ItemManager() xmlDocPtr doc = xmlParseMemory(data, size); free(data); - if (doc) + if (!doc) { - xmlNodePtr node = xmlDocGetRootElement(doc); + logger->error("Item Manager: Error while parsing item database (items.xml)!"); + return; + } - if (!node || !xmlStrEqual(node->name, BAD_CAST "items")) + xmlNodePtr node = xmlDocGetRootElement(doc); + if (!node || !xmlStrEqual(node->name, BAD_CAST "items")) + { + logger->error("Item Manager: items.xml is not a valid database file!"); + return; + } + + for (node = node->xmlChildrenNode; node != NULL; node = node->next) + { + int id = 0, image = 0, art = 0, type = 0, weight = 0, slot = 0; + std::string name = "", description = "", effect = ""; + + if (!xmlStrEqual(node->name, BAD_CAST "item")) { + continue; + } + + xmlChar *prop = NULL; + READ_PROP(node, prop, "id", id, atoi); + READ_PROP(node, prop, "image", image, atoi); + READ_PROP(node, prop, "art", art, atoi); + READ_PROP(node, prop, "name", name, ); + READ_PROP(node, prop, "description", description, ); + READ_PROP(node, prop, "effect", effect, ); + READ_PROP(node, prop, "type", type, atoi); + READ_PROP(node, prop, "weight", weight, atoi); + READ_PROP(node, prop, "slot", slot, atoi); + + if (id && name != "") + { + ItemInfo *itemInfo = new ItemInfo(); + itemInfo->setImage(image); + itemInfo->setArt(art); + itemInfo->setName(name); + itemInfo->setDescription(description); + itemInfo->setEffect(effect); + itemInfo->setType(type); + itemInfo->setWeight(weight); + itemInfo->setSlot(slot); + mItemInfos[id] = itemInfo; + } + + if (id == 0) { - logger->error("Item Manager: items.xml is not a valid database file!"); + logger->log("Item Manager: An item has no ID in items.xml!"); } - else + if (name == "") { - for (node = node->xmlChildrenNode; node != NULL; node = node->next) - { - int id = 0, image = 0, art = 0, type = 0, weight = 0, slot = 0; - std::string name = "", description = "", effect = ""; - - if (xmlStrEqual(node->name, BAD_CAST "item")) - { - xmlChar *prop = NULL; - // Item id - prop = xmlGetProp(node, BAD_CAST "id"); - if (prop) id = atoi((const char*)prop); - xmlFree(prop); - // Image id - prop = xmlGetProp(node, BAD_CAST "image"); - if (prop) image = atoi((const char*)prop); - xmlFree(prop); - // Art id - prop = xmlGetProp(node, BAD_CAST "art"); - if (prop) art = atoi((const char*)prop); - xmlFree(prop); - // Name - prop = xmlGetProp(node, BAD_CAST "name"); - if (prop) name = (const char*)prop; - xmlFree(prop); - // Description - prop = xmlGetProp(node, BAD_CAST "description"); - if (prop) description = (const char*)prop; - xmlFree(prop); - // Effect - prop = xmlGetProp(node, BAD_CAST "effect"); - if (prop) effect = (const char*)prop; - xmlFree(prop); - // Type id - prop = xmlGetProp(node, BAD_CAST "type"); - if (prop) type = atoi((const char*)prop); - xmlFree(prop); - // Weight - prop = xmlGetProp(node, BAD_CAST "weight"); - if (prop) weight = atoi((const char*)prop); - xmlFree(prop); - // Slot - prop = xmlGetProp(node, BAD_CAST "slot"); - if (prop) slot = atoi((const char*)prop); - xmlFree(prop); - - if (id && name != "") - { - ItemInfo *itemInfo = new ItemInfo(); - itemInfo->setImage(image); - itemInfo->setArt(art); - itemInfo->setName(name); - itemInfo->setDescription(description); - itemInfo->setEffect(effect); - itemInfo->setType(type); - itemInfo->setWeight(weight); - itemInfo->setSlot(slot); - db[id] = itemInfo; - } - - if (id == 0) - { - logger->log("Item Manager: An item has no ID in items.xml!"); - } - if (name == "") - { - logger->log("Item Manager: An item has no name in items.xml!"); - } - - if (image == 0) - { - logger->log("Item Manager: Missing image parameter for item: %i. %s", - id, name.c_str()); - } - if (art == 0) - { - logger->log("Item Manager: Missing art parameter for item: %i. %s", - id, name.c_str()); - } - if (description == "") - { - logger->log("Item Manager: Missing description parameter for item: %i. %s", - id, name.c_str()); - } - if (effect == "") - { - logger->log("Item Manager: Missing effect parameter for item: %i. %s", - id, name.c_str()); - } - if (type == 0) - { - logger->log("Item Manager: Missing type parameter for item: %i. %s", - id, name.c_str()); - } - if (weight == 0) - { - logger->log("Item Manager: Missing weight parameter for item: %i. %s", - id, name.c_str()); - } - if (slot == 0) - { - logger->log("Item Manager: Missing image parameter for item: %i. %s", - id, name.c_str()); - } - - /*logger->log("Item: %i %i %i %s %s %i %i %i", id, - getImage(id), getArt(id), getName(id).c_str(), - getDescription(id).c_str(), getType(id), getWeight(id), - getSlot(id));*/ - } - } + logger->log("Item Manager: An item has no name in items.xml!"); } - xmlFreeDoc(doc); - } - else { - logger->error("Item Manager: Error while parsing item database (items.xml)!"); + if (image == 0) + { + logger->log("Item Manager: Missing image parameter for item: %i. %s", + id, name.c_str()); + } + if (art == 0) + { + logger->log("Item Manager: Missing art parameter for item: %i. %s", + id, name.c_str()); + } + if (description == "") + { + logger->log("Item Manager: Missing description parameter for item: %i. %s", + id, name.c_str()); + } + if (effect == "") + { + logger->log("Item Manager: Missing effect parameter for item: %i. %s", + id, name.c_str()); + } + if (type == 0) + { + logger->log("Item Manager: Missing type parameter for item: %i. %s", + id, name.c_str()); + } + if (weight == 0) + { + logger->log("Item Manager: Missing weight parameter for item: %i. %s", + id, name.c_str()); + } + if (slot == 0) + { + logger->log("Item Manager: Missing image parameter for item: %i. %s", + id, name.c_str()); + } + + /*logger->log("Item: %i %i %i %s %s %i %i %i", id, + getImage(id), getArt(id), getName(id).c_str(), + getDescription(id).c_str(), getType(id), getWeight(id), + getSlot(id));*/ } - unknown = new ItemInfo(); - unknown->setName("Unknown item"); + xmlFreeDoc(doc); } ItemManager::~ItemManager() { - std::map<int, ItemInfo*>::iterator i; - for (i = db.begin(); i != db.end(); i++) + for (ItemInfoIterator i = mItemInfos.begin(); i != mItemInfos.end(); i++) { - delete (*i).second; + delete i->second; } - db.clear(); + mItemInfos.clear(); delete unknown; } @@ -189,12 +167,7 @@ ItemManager::~ItemManager() ItemInfo* ItemManager::getItemInfo(int id) { - if (db.find(id) != db.end()) - { - return db[id]; - } - else - { - return unknown; - } + ItemInfoIterator i = mItemInfos.find(id); + + return (i != mItemInfos.end()) ? i->second : unknown; } diff --git a/src/resources/itemmanager.h b/src/resources/itemmanager.h index 6d969923..5a571de2 100644 --- a/src/resources/itemmanager.h +++ b/src/resources/itemmanager.h @@ -48,7 +48,9 @@ class ItemManager protected: // Items database - std::map<int, ItemInfo*> db; + typedef std::map<int, ItemInfo*> ItemInfos; + typedef ItemInfos::iterator ItemInfoIterator; + ItemInfos mItemInfos; ItemInfo *unknown; }; |