Commit 1d23fa03 authored by hybrid's avatar hybrid

Make additional file loading more flexible.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2829 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 45d10d0f
......@@ -444,19 +444,10 @@ void COgreMeshFileLoader::composeMeshBufferMaterial(scene::IMeshBuffer* mb, cons
material=Materials[k].Techniques[0].Passes[0].Material;
if (Materials[k].Techniques[0].Passes[0].Texture.Filename.size())
{
if (FileSystem->existFile(Materials[k].Techniques[0].Passes[0].Texture.Filename))
material.setTexture(0, Driver->getTexture(Materials[k].Techniques[0].Passes[0].Texture.Filename));
if (!material.getTexture(0))
{
// retry with relative path
core::stringc relative = Materials[k].Techniques[0].Passes[0].Texture.Filename;
s32 idx = relative.findLast('\\');
if (idx != -1)
relative = relative.subString(idx+1, relative.size()-idx-1);
idx = relative.findLast('/');
if (idx != -1)
relative = relative.subString(idx+1, relative.size()-idx-1);
material.setTexture(0, Driver->getTexture((CurrentlyLoadingFromPath+"/"+relative)));
}
else
material.setTexture(0, Driver->getTexture((CurrentlyLoadingFromPath+"/"+FileSystem->getFileBasename(Materials[k].Techniques[0].Passes[0].Texture.Filename))));
}
break;
}
......@@ -1232,9 +1223,13 @@ void COgreMeshFileLoader::loadMaterials(io::IReadFile* meshFile)
#ifdef IRR_OGRE_LOADER_DEBUG
os::Printer::log("Load Materials");
#endif
core::stringc token = meshFile->getFileName();
io::path filename = token.subString(0, token.size()-4) + L"material";
io::IReadFile* file = FileSystem->createAndOpenFile(filename);
core::stringc token;
io::IReadFile* file = 0;
io::path filename = FileSystem->getFileBasename(meshFile->getFileName(), false) + ".material";
if (FileSystem->existFile(filename))
file = FileSystem->createAndOpenFile(filename);
else
file = FileSystem->createAndOpenFile(FileSystem->getFileDir(meshFile->getFileName())+"/"+filename);
if (!file)
{
......@@ -1319,17 +1314,21 @@ bool COgreMeshFileLoader::loadSkeleton(io::IReadFile* meshFile, const core::stri
#ifdef IRR_OGRE_LOADER_DEBUG
os::Printer::log("Load Skeleton", name);
#endif
io::IReadFile* file = FileSystem->createAndOpenFile(name);
if (!file)
{
io::path filename = meshFile->getFileName().subString(0, meshFile->getFileName().size()-4) + L"skeleton";
io::IReadFile* file = 0;
io::path filename;
if (FileSystem->existFile(name))
file = FileSystem->createAndOpenFile(name);
else if (FileSystem->existFile(filename = FileSystem->getFileDir(meshFile->getFileName())+"/"+name))
file = FileSystem->createAndOpenFile(filename);
else if (FileSystem->existFile(filename = FileSystem->getFileBasename(meshFile->getFileName(), false) + ".skeleton"))
file = FileSystem->createAndOpenFile(filename);
else
file = FileSystem->createAndOpenFile(FileSystem->getFileDir(meshFile->getFileName())+"/"+filename);
if (!file)
{
os::Printer::log("Could not load matching skeleton", name);
return false;
}
}
s16 id;
file->read(&id, 2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment