diff --git a/WickedEngine/WickedEngine_Windows.vcxproj b/WickedEngine/WickedEngine_Windows.vcxproj index ddefd9cbd..60eaab952 100644 --- a/WickedEngine/WickedEngine_Windows.vcxproj +++ b/WickedEngine/WickedEngine_Windows.vcxproj @@ -93,6 +93,7 @@ _WIN32_WINNT=0x0601;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) BULLET;%(AdditionalIncludeDirectories) true + false Windows @@ -116,6 +117,7 @@ _WIN32_WINNT=0x0601;_DEBUG;_LIB;%(PreprocessorDefinitions) BULLET;%(AdditionalIncludeDirectories) true + false Windows diff --git a/WickedEngine/wiArchive.cpp b/WickedEngine/wiArchive.cpp index 29345ff1b..3593712e3 100644 --- a/WickedEngine/wiArchive.cpp +++ b/WickedEngine/wiArchive.cpp @@ -88,3 +88,13 @@ bool wiArchive::SaveFile(const string& fileName) return false; } + +string wiArchive::GetSourceDirectory() +{ + return wiHelper::GetDirectoryFromPath(fileName); +} + +string wiArchive::GetSourceFileName() +{ + return fileName; +} diff --git a/WickedEngine/wiArchive.h b/WickedEngine/wiArchive.h index 706a6d772..178b04d0e 100644 --- a/WickedEngine/wiArchive.h +++ b/WickedEngine/wiArchive.h @@ -21,6 +21,8 @@ public: bool IsOpen(); void Close(); bool SaveFile(const string& fileName); + string GetSourceDirectory(); + string GetSourceFileName(); // It could be templated but we have to be extremely careful of different datasizes on different platforms // because serialized data should be interchangeable! diff --git a/WickedEngine/wiHelper.cpp b/WickedEngine/wiHelper.cpp index 490d00c30..2ab830c4a 100644 --- a/WickedEngine/wiHelper.cpp +++ b/WickedEngine/wiHelper.cpp @@ -172,6 +172,11 @@ namespace wiHelper string GetFileNameFromPath(const string& fullPath) { + if (fullPath.empty()) + { + return fullPath; + } + string ret, empty; SplitPath(fullPath, empty, ret); return ret; @@ -179,6 +184,11 @@ namespace wiHelper string GetDirectoryFromPath(const string& fullPath) { + if (fullPath.empty()) + { + return fullPath; + } + string ret, empty; SplitPath(fullPath, ret, empty); return ret; diff --git a/WickedEngine/wiLoader.cpp b/WickedEngine/wiLoader.cpp index 792103ad0..dedad9022 100644 --- a/WickedEngine/wiLoader.cpp +++ b/WickedEngine/wiLoader.cpp @@ -1521,7 +1521,7 @@ void Material::Serialize(wiArchive& archive) archive >> parallaxOcclusionMapping; } - string texturesDir = "textures/"; + string texturesDir = archive.GetSourceDirectory() + "textures/"; if (!refMapName.empty()) { refMapName = texturesDir + refMapName; @@ -2510,11 +2510,6 @@ void Model::CleanUp() } void Model::LoadFromDisk(const string& dir, const string& name, const string& identifier) { - if (!dir.empty()) - { - wiHelper::SetWorkingDirectory(wiHelper::GetOriginalWorkingDirectory() + dir); - } - wiArchive archive(name + ".wimf", true); if (archive.IsOpen()) { @@ -3828,7 +3823,7 @@ void Decal::Serialize(wiArchive& archive) archive >> life; archive >> fadeStart; - string texturesDir = "textures/"; + string texturesDir = archive.GetSourceDirectory() + "textures/"; if (!texName.empty()) { texName = texturesDir + texName; @@ -4177,7 +4172,7 @@ void Light::Serialize(wiArchive& archive) { archive >> rim; Texture2D* tex; - rim = "rims/" + rim; + rim = archive.GetSourceDirectory() + "rims/" + rim; if (!rim.empty() && (tex = (Texture2D*)wiResourceManager::GetGlobal()->add(rim)) != nullptr) { lensFlareRimTextures.push_back(tex); lensFlareNames.push_back(rim); @@ -4199,4 +4194,4 @@ void Light::Serialize(wiArchive& archive) } } } -#pragma endregion \ No newline at end of file +#pragma endregion diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 831ed5dcd..b4590f9d0 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,7 +7,7 @@ namespace wiVersion // minor features, major bug fixes const int minor = 8; // minor bug fixes, alterations, refactors - const int revision = 41; + const int revision = 42; long GetVersion()