diff --git a/CMakeLists.txt b/CMakeLists.txt index b29159599..091822cdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,6 +130,8 @@ if(USE_LD_GOLD AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_ endif() endif() +set(HECL_DLPACKAGE ${URDE_DLPACKAGE}) + set(BOO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/extern/boo/include) set(HECL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hecl/include ${CMAKE_CURRENT_SOURCE_DIR}/hecl/blender) diff --git a/Editor/ViewManager.cpp b/Editor/ViewManager.cpp index 73ee6533d..ac922da38 100644 --- a/Editor/ViewManager.cpp +++ b/Editor/ViewManager.cpp @@ -22,6 +22,8 @@ using YAMLNode = athena::io::YAMLNode; +extern hecl::SystemString ExeDir; + namespace urde { @@ -227,6 +229,19 @@ void ViewManager::init(boo::IApplication* app) else if (arg == _S("--no-sound")) m_voiceEngine->setVolume(0.f); } + + if (m_deferedProject.empty()) + { + /* Default behavior - search upwards for packaged project containing the program */ + if (hecl::ProjectRootPath root = hecl::SearchForProject(ExeDir)) + { + hecl::SystemString rootPath(root.getAbsolutePath()); + hecl::Sstat theStat; + if (!hecl::Stat((rootPath + _S("/out/MP1/!original_ids.upak")).c_str(), &theStat) && + S_ISREG(theStat.st_mode)) + m_deferedProject = rootPath + _S("/out"); + } + } } bool ViewManager::proc() diff --git a/hecl b/hecl index 3005d50ea..1063d4e05 160000 --- a/hecl +++ b/hecl @@ -1 +1 @@ -Subproject commit 3005d50ead7e443eb82297aad49aeb1b47ea0c47 +Subproject commit 1063d4e05482333fe80356b9ca4b8ebe71f3a71f diff --git a/hecl-gui b/hecl-gui index dd0ce3563..7935d3083 160000 --- a/hecl-gui +++ b/hecl-gui @@ -1 +1 @@ -Subproject commit dd0ce35633bd96ae4b4c9910b93185f6a841b310 +Subproject commit 7935d308301d95baa36ae65c3bf876d46809cecc diff --git a/visigen/CMakeLists.txt b/visigen/CMakeLists.txt index febe5d85a..7e7556b78 100644 --- a/visigen/CMakeLists.txt +++ b/visigen/CMakeLists.txt @@ -24,5 +24,9 @@ endif() add_executable(visigen ${PLAT_SRCS} VISIRenderer.cpp VISIRenderer.hpp VISIBuilder.cpp VISIBuilder.hpp) -target_link_libraries(visigen logvisor athena-core athena-libyaml zeus glew xxhash ${ZLIB_LIBRARIES} ${LZO_LIB} ${BOO_SYS_LIBS}) + +set_target_properties(visigen PROPERTIES COMPILE_DEFINITIONS URDE_DLPACKAGE="${URDE_DLPACKAGE}") + +target_link_libraries(visigen logvisor athena-core athena-libyaml zeus glew + xxhash ${ZLIB_LIBRARIES} ${LZO_LIB} ${BOO_SYS_LIBS}) endif() diff --git a/visigen/MainMac.mm b/visigen/MainMac.mm index 94c4c9baf..c41f66839 100644 --- a/visigen/MainMac.mm +++ b/visigen/MainMac.mm @@ -114,6 +114,12 @@ static void AthenaExc(athena::error::Level level, const char* file, int main(int argc, const char** argv) { + if (argc > 1 && !strcmp(argv[1], "--dlpackage")) + { + printf("%s\n", URDE_DLPACKAGE); + return 100; + } + logvisor::RegisterStandardExceptions(); logvisor::RegisterConsoleLogger(); atSetExceptionHandler(AthenaExc); diff --git a/visigen/MainWin.cpp b/visigen/MainWin.cpp index 496e079f6..293c45b06 100644 --- a/visigen/MainWin.cpp +++ b/visigen/MainWin.cpp @@ -50,6 +50,12 @@ static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM l int wmain(int argc, const hecl::SystemChar** argv) { + if (argc > 1 && !_wcscmp(argv[1], L"--dlpackage")) + { + printf("%s\n", URDE_DLPACKAGE); + return 100; + } + logvisor::RegisterStandardExceptions(); logvisor::RegisterConsoleLogger(); atSetExceptionHandler(AthenaExc); diff --git a/visigen/MainXlib.cpp b/visigen/MainXlib.cpp index 2d00d197f..897885b93 100644 --- a/visigen/MainXlib.cpp +++ b/visigen/MainXlib.cpp @@ -104,6 +104,12 @@ static void _sigint(int) {} int main(int argc, const char** argv) { + if (argc > 1 && !strcmp(argv[1], "--dlpackage")) + { + printf("%s\n", URDE_DLPACKAGE); + return 100; + } + /* Program is portable to all locales */ setlocale(LC_ALL, "");