fix a bug with case sensitivity: when searching for a cell which is already loaded,but with another case, the cell get loaded twice, which is bad :p

This commit is contained in:
gugus 2012-08-21 19:54:42 +02:00
parent cc01a5ceed
commit 165065d378

View file

@ -8,6 +8,17 @@
#include "class.hpp" #include "class.hpp"
#include "containerstore.hpp" #include "containerstore.hpp"
//helper function
std::string toLower (const std::string& name)
{
std::string lowerCase;
std::transform (name.begin(), name.end(), std::back_inserter (lowerCase),
(int(*)(int)) std::tolower);
return lowerCase;
}
MWWorld::Ptr::CellStore *MWWorld::Cells::getCellStore (const ESM::Cell *cell) MWWorld::Ptr::CellStore *MWWorld::Cells::getCellStore (const ESM::Cell *cell)
{ {
if (cell->data.flags & ESM::Cell::Interior) if (cell->data.flags & ESM::Cell::Interior)
@ -129,13 +140,14 @@ MWWorld::Ptr::CellStore *MWWorld::Cells::getExterior (int x, int y)
MWWorld::Ptr::CellStore *MWWorld::Cells::getInterior (const std::string& name) MWWorld::Ptr::CellStore *MWWorld::Cells::getInterior (const std::string& name)
{ {
std::map<std::string, Ptr::CellStore>::iterator result = mInteriors.find (name); std::string nName = toLower(name);
std::map<std::string, Ptr::CellStore>::iterator result = mInteriors.find (nName);
if (result==mInteriors.end()) if (result==mInteriors.end())
{ {
const ESM::Cell *cell = mStore.cells.findInt (name); const ESM::Cell *cell = mStore.cells.findInt (nName);
result = mInteriors.insert (std::make_pair (name, Ptr::CellStore (cell))).first; result = mInteriors.insert (std::make_pair (nName, Ptr::CellStore (cell))).first;
} }
if (result->second.mState!=Ptr::CellStore::State_Loaded) if (result->second.mState!=Ptr::CellStore::State_Loaded)