Commit 8615f1bbad630602009c04a317cd83e03aaa620c

Unload loaded DBs before loading them again

This greatly simplifies handling DBs when changing states. No more
need to manage unloading in Client (except when exiting).

Reviewed-by: Thorbjørn Lindeijer
  
422422 SDL_RemoveTimer(mLogicCounterId);
423423 SDL_RemoveTimer(mSecondsCounterId);
424424
425 // Unload XML databases
426 ColorDB::unload();
427 EmoteDB::unload();
428 ItemDB::unload();
429 MonsterDB::unload();
430 NPCDB::unload();
431 StatusEffect::unload();
432
425433 // Before config.write() since it writes the shortcuts to the config
426434 delete itemShortcut;
427435 delete emoteShortcut;
583583 {
584584 delete game;
585585 game = 0;
586
587 // Unload XML databases
588 ColorDB::unload();
589 EmoteDB::unload();
590 ItemDB::unload();
591 MonsterDB::unload();
592 NPCDB::unload();
593 StatusEffect::unload();
594586 }
595587
596588 mOldState = mState;
  
3636void ColorDB::load()
3737{
3838 if (mLoaded)
39 return;
39 unload();
4040
4141 XML::Document *doc = new XML::Document("hair.xml");
4242 xmlNodePtr root = doc->rootNode();
  
3636void EmoteDB::load()
3737{
3838 if (mLoaded)
39 return;
39 unload();
4040
4141 mLastEmote = 0;
4242
  
108108void ItemDB::load()
109109{
110110 if (mLoaded)
111 return;
111 unload();
112112
113113 logger->log("Initializing item database...");
114114
  
4343void MonsterDB::load()
4444{
4545 if (mLoaded)
46 return;
46 unload();
4747
4848 mUnknown.addSprite("error.xml");
4949
  
3535void NPCDB::load()
3636{
3737 if (mLoaded)
38 return;
38 unload();
3939
4040 NPCsprite *unknownSprite = new NPCsprite;
4141 unknownSprite->sprite = "error.xml";
  
3232
3333#define STATUS_EFFECTS_FILE "status-effects.xml"
3434
35bool StatusEffect::mLoaded = false;
36
3537StatusEffect::StatusEffect() :
3638 mPersistentParticleEffect(false)
3739{}
115115
116116void StatusEffect::load()
117117{
118 if (mLoaded)
119 unload();
120
118121 XML::Document doc(STATUS_EFFECTS_FILE);
119122 xmlNodePtr rootNode = doc.rootNode();
120123
180180
181181void StatusEffect::unload()
182182{
183 if (!mLoaded)
184 return;
185
183186 unloadMap(statusEffects[0]);
184187 unloadMap(statusEffects[1]);
185188 unloadMap(stunEffects[0]);
186189 unloadMap(stunEffects[1]);
190
191 mLoaded = false;
187192}
  
9898
9999 static void unload();
100100private:
101 static bool mLoaded;
101102
102103 std::string mMessage;
103104 std::string mSFXEffect;