static void CryFindEngineToolsFolder(unsigned int nEngineToolsPathSize, wchar_t* szEngineToolsPath) { const size_t len = ::GetModuleFileNameW(GetModuleHandle(NULL), szEngineToolsPath, nEngineToolsPathSize); if (len <= 0) { szEngineToolsPath[0] = L'\0'; return; } SettingsManagerHelpers::CFixedString<wchar_t, MAX_PATH * 2> filename; while (wchar_t* pathEnd = wcsrchr(szEngineToolsPath, L'\\')) { pathEnd[0] = L'\0'; filename.clear(); filename.append(szEngineToolsPath); filename.append(L"/Tools"); if (filename.length() < nEngineToolsPathSize) { const DWORD dwAttr = ::GetFileAttributesW(filename.c_str()); if (dwAttr != INVALID_FILE_ATTRIBUTES && (dwAttr & FILE_ATTRIBUTE_DIRECTORY) != 0) { memcpy(szEngineToolsPath, filename.c_str(), sizeof(szEngineToolsPath[0]) * (filename.length() + 1)); return; } } } szEngineToolsPath[0] = L'\0'; }
void CResourceCompilerHelper::GetEditorExecutable(SettingsManagerHelpers::CWCharBuffer wbuffer) { if (wbuffer.getSizeInElements() <= 0) { return; } g_pSettingsManager->GetRootPathUtf16(wbuffer); SettingsManagerHelpers::CFixedString<wchar_t, 1024> editorExe; editorExe = wbuffer.getPtr(); if (editorExe.length() <= 0) { MessageBoxA(NULL, "Can't Find the Editor.\nPlease, setup correct CryENGINE root path in the engine settings dialog", "Error", MB_ICONERROR | MB_OK); ResourceCompilerUI(0); g_pSettingsManager->GetRootPathUtf16(wbuffer); editorExe = wbuffer.getPtr(); if (editorExe.length() <= 0) { wbuffer[0] = 0; return; } } g_pSettingsManager->GetValueByRef("EDT_Prefer32Bit", wbuffer); if (wcscmp(wbuffer.getPtr(), L"true") == 0) { editorExe.appendAscii("/Bin32/Editor.exe"); } else { editorExe.appendAscii("/Bin64/Editor.exe"); } const size_t sizeToCopy = (editorExe.length() + 1) * sizeof(wbuffer[0]); if (sizeToCopy > wbuffer.getSizeInBytes()) { wbuffer[0] = 0; } else { memcpy(wbuffer.getPtr(), editorExe.c_str(), sizeToCopy); } }