String FileUtils::GetAntPath(const String& defaultPath) { String antPath; nfdchar_t *outPath = NULL; #ifdef ATOMIC_PLATFORM_WINDOWS String msg = "Please select the folder which contains ant.bat"; #else String msg = "Please select the folder which contains the ant executable"; #endif nfdresult_t result = NFD_ChooseDirectory(msg.CString(), defaultPath.Length() ? defaultPath.CString() : NULL, &outPath); if (outPath && result == NFD_OKAY) { antPath = outPath; } if (outPath) free(outPath); GetSubsystem<Graphics>()->RaiseWindow(); return GetInternalPath(antPath); }
String ResourceCache::SanitateResourceName(const String& nameIn) const { // Sanitate unsupported constructs from the resource name String name = GetInternalPath(nameIn); name.Replace("../", ""); name.Replace("./", ""); return name; }
void Urho3D::Setup() { // Check for script file name const Vector<String>& arguments = GetArguments(); String scriptFileName; for (unsigned i = 0; i < arguments.Size(); ++i) { if (arguments[i][0] != '-') { scriptFileName_ = GetInternalPath(arguments[i]); break; } } #if defined(ANDROID) || defined(IOS) // Can not pass script name on mobile devices, so choose a hardcoded default scriptFileName_ = "Scripts/NinjaSnowWar.as"; #endif // Show usage if not found if (scriptFileName_.Empty()) { ErrorExit("Usage: Urho3D <scriptfile> [options]\n\n" "The script file should implement the function void Start() for initializing the " "application and subscribing to all necessary events, such as the frame update.\n" #ifndef WIN32 "\nCommand line options:\n" "-x<res> Horizontal resolution\n" "-y<res> Vertical resolution\n" "-m<level> Enable hardware multisampling\n" "-v Enable vertical sync\n" "-t Enable triple buffering\n" "-w Start in windowed mode\n" "-s Enable resizing when in windowed mode\n" "-q Enable quiet mode which does not log to standard output stream\n" "-b<length> Sound buffer length in milliseconds\n" "-r<freq> Sound mixing frequency in Hz\n" "-headless Headless mode. No application window will be created\n" "-log<level> Change the log level, valid 'level' values are 'debug', 'info', 'warning', 'error'\n" "-prepass Use light pre-pass rendering\n" "-deferred Use deferred rendering\n" "-lqshadows Use low-quality (1-sample) shadow filtering\n" "-noshadows Disable shadow rendering\n" "-nolimit Disable frame limiter\n" "-nothreads Disable worker threads\n" "-nosound Disable sound output\n" "-noip Disable sound mixing interpolation\n" "-sm2 Force SM2.0 rendering\n" #endif ); } }
String FileUtils::FindPath(const String& title, const String& defaultPath) { String resultPath; nfdchar_t *outPath = NULL; nfdresult_t result = NFD_PickFolder(defaultPath.Length() ? GetNativePath(defaultPath).CString() : "", &outPath); if (outPath && result == NFD_OKAY) { resultPath = outPath; } if (outPath) free(outPath); GetSubsystem<Graphics>()->RaiseWindow(); return GetInternalPath(resultPath); }
String FileUtils::GetJDKRootPath(const String& defaultPath) { String jdkPath; nfdchar_t *outPath = NULL; nfdresult_t result = NFD_ChooseDirectory("Please choose the root folder of your JDK", defaultPath.Length() ? defaultPath.CString() : NULL, &outPath); if (outPath && result == NFD_OKAY) { jdkPath = outPath; } if (outPath) free(outPath); GetSubsystem<Graphics>()->RaiseWindow(); return GetInternalPath(jdkPath); }
void Urho3DPlayer::Setup() { FileSystem* filesystem = GetSubsystem<FileSystem>(); // On Android and iOS, read command line from a file as parameters can not otherwise be easily given #if defined(ANDROID) || defined(IOS) SharedPtr<File> commandFile(new File(context_, filesystem->GetProgramDir() + "Data/CommandLine.txt", FILE_READ)); String commandLine = commandFile->ReadLine(); commandFile->Close(); ParseArguments(commandLine, false); // Reparse engine startup parameters now engineParameters_ = Engine::ParseParameters(GetArguments()); #endif // Check for script file name const Vector<String>& arguments = GetArguments(); String scriptFileName; for (unsigned i = 0; i < arguments.Size(); ++i) { if (arguments[i][0] != '-') { scriptFileName_ = GetInternalPath(arguments[i]); break; } } // Show usage if not found if (scriptFileName_.Empty()) { ErrorExit("Usage: Urho3DPlayer <scriptfile> [options]\n\n" "The script file should implement the function void Start() for initializing the " "application and subscribing to all necessary events, such as the frame update.\n" #ifndef WIN32 "\nCommand line options:\n" "-x <res> Horizontal resolution\n" "-y <res> Vertical resolution\n" "-m <level> Enable hardware multisampling\n" "-v Enable vertical sync\n" "-t Enable triple buffering\n" "-w Start in windowed mode\n" "-s Enable resizing when in windowed mode\n" "-q Enable quiet mode which does not log to standard output stream\n" "-b <length> Sound buffer length in milliseconds\n" "-r <freq> Sound mixing frequency in Hz\n" "-p <paths> Resource path(s) to use, separated by semicolons\n" "-ap <paths> Autoload resource path(s) to use, seperated by semicolons\n" "-log <level> Change the log level, valid 'level' values are 'debug', 'info', 'warning', 'error'\n" "-ds <file> Dump used shader variations to a file for precaching\n" "-mq <level> Material quality level, default 2 (high)\n" "-tq <level> Texture quality level, default 2 (high)\n" "-tf <level> Texture filter mode, default 2 (trilinear)\n" "-af <level> Texture anisotropy level, default 4. Also sets anisotropic filter mode\n" "-flushgpu Flush GPU command queue each frame. Effective only on Direct3D9\n" "-borderless Borderless window mode\n" "-headless Headless mode. No application window will be created\n" "-landscape Use landscape orientations (iOS only, default)\n" "-portrait Use portrait orientations (iOS only)\n" "-prepass Use light pre-pass rendering\n" "-deferred Use deferred rendering\n" "-lqshadows Use low-quality (1-sample) shadow filtering\n" "-noshadows Disable shadow rendering\n" "-nolimit Disable frame limiter\n" "-nothreads Disable worker threads\n" "-nosound Disable sound output\n" "-noip Disable sound mixing interpolation\n" "-sm2 Force SM2.0 rendering\n" "-touch Touch emulation on desktop platform\n" #endif ); } else { // Use the script file name as the base name for the log file //engineParameters_["LogName"] = filesystem->GetAppPreferencesDir("urho3d", "logs") + GetFileNameAndExtension(scriptFileName_) + ".log"; engineParameters_["LogName"]="Urho3D.log"; } }
void Urho3DPlayer::Setup() { FileSystem* filesystem = GetSubsystem<FileSystem>(); // Read command line from a file if no arguments given. This is primarily intended for mobile platforms. // Note that the command file name uses a hardcoded path that does not utilize the resource system // properly (including resource path prefix), as the resource system is not yet initialized at this point const String commandFileName = filesystem->GetProgramDir() + "Data/CommandLine.txt"; if (GetArguments().Empty() && filesystem->FileExists(commandFileName)) { SharedPtr<File> commandFile(new File(context_, commandFileName)); String commandLine = commandFile->ReadLine(); commandFile->Close(); ParseArguments(commandLine, false); // Reparse engine startup parameters now engineParameters_ = Engine::ParseParameters(GetArguments()); } // Check for script file name const Vector<String>& arguments = GetArguments(); String scriptFileName; if (arguments.Size() && arguments[0][0] != '-') scriptFileName_ = GetInternalPath(arguments[0]); // Show usage if not found if (scriptFileName_.Empty()) { ErrorExit("Usage: Urho3DPlayer <scriptfile> [options]\n\n" "The script file should implement the function void Start() for initializing the " "application and subscribing to all necessary events, such as the frame update.\n" #ifndef WIN32 "\nCommand line options:\n" "-x <res> Horizontal resolution\n" "-y <res> Vertical resolution\n" "-m <level> Enable hardware multisampling\n" "-v Enable vertical sync\n" "-t Enable triple buffering\n" "-w Start in windowed mode\n" "-s Enable resizing when in windowed mode\n" "-q Enable quiet mode which does not log to standard output stream\n" "-b <length> Sound buffer length in milliseconds\n" "-r <freq> Sound mixing frequency in Hz\n" "-p <paths> Resource path(s) to use, separated by semicolons\n" "-ap <paths> Autoload resource path(s) to use, seperated by semicolons\n" "-log <level> Change the log level, valid 'level' values are 'debug', 'info', 'warning', 'error'\n" "-ds <file> Dump used shader variations to a file for precaching\n" "-mq <level> Material quality level, default 2 (high)\n" "-tq <level> Texture quality level, default 2 (high)\n" "-tf <level> Texture filter mode, default 2 (trilinear)\n" "-af <level> Texture anisotropy level, default 4. Also sets anisotropic filter mode\n" "-gl2 Force OpenGL 2 use even if OpenGL 3 is available\n" "-flushgpu Flush GPU command queue each frame. Effective only on Direct3D\n" "-borderless Borderless window mode\n" "-headless Headless mode. No application window will be created\n" "-landscape Use landscape orientations (iOS only, default)\n" "-portrait Use portrait orientations (iOS only)\n" "-prepass Use light pre-pass rendering\n" "-deferred Use deferred rendering\n" "-renderpath <name> Use the named renderpath (must enter full resource name)\n" "-lqshadows Use low-quality (1-sample) shadow filtering\n" "-noshadows Disable shadow rendering\n" "-nolimit Disable frame limiter\n" "-nothreads Disable worker threads\n" "-nosound Disable sound output\n" "-noip Disable sound mixing interpolation\n" "-touch Touch emulation on desktop platform\n" #endif ); } else { // Use the script file name as the base name for the log file engineParameters_["LogName"] = filesystem->GetAppPreferencesDir("urho3d", "logs") + GetFileNameAndExtension(scriptFileName_) + ".log"; } // Construct a search path to find the resource prefix with two entries: // The first entry is an empty path which will be substituted with program/bin directory -- this entry is for binary when it is still in build tree // The second and third entries are possible relative paths from the installed program/bin directory to the asset directory -- these entries are for binary when it is in the Urho3D SDK installation location if (!engineParameters_.Contains("ResourcePrefixPaths")) engineParameters_["ResourcePrefixPaths"] = ";../share/Resources;../share/Urho3D/Resources"; }
void Urho3DPlayer::Setup() { // On Android and iOS, read command line from a file as parameters can not otherwise be easily given #if defined(ANDROID) || defined(IOS) SharedPtr<File> commandFile(new File(context_, GetSubsystem<FileSystem>()->GetProgramDir() + "Data/CommandLine.txt", FILE_READ)); String commandLine = commandFile->ReadLine(); commandFile->Close(); ParseArguments(commandLine, false); // Reparse engine startup parameters now engineParameters_ = Engine::ParseParameters(GetArguments()); #endif // Check for script file name const Vector<String>& arguments = GetArguments(); String scriptFileName; for (unsigned i = 0; i < arguments.Size(); ++i) { if (arguments[i][0] != '-') { scriptFileName_ = GetInternalPath(arguments[i]); break; } } // Show usage if not found if (scriptFileName_.Empty()) { ErrorExit("Usage: Urho3DPlayer <scriptfile> [options]\n\n" "The script file should implement the function void Start() for initializing the " "application and subscribing to all necessary events, such as the frame update.\n" #ifndef WIN32 "\nCommand line options:\n" "-x <res> Horizontal resolution\n" "-y <res> Vertical resolution\n" "-m <level> Enable hardware multisampling\n" "-v Enable vertical sync\n" "-t Enable triple buffering\n" "-w Start in windowed mode\n" "-s Enable resizing when in windowed mode\n" "-q Enable quiet mode which does not log to standard output stream\n" "-b <length> Sound buffer length in milliseconds\n" "-r <freq> Sound mixing frequency in Hz\n" "-p <paths> Resource path(s) to use, separated by semicolons\n" "-log <level> Change the log level, valid 'level' values are 'debug', 'info', 'warning', 'error'\n" "-ds <file> Dump used shader variations to a file for precaching\n" "-borderless Borderless window mode\n" "-headless Headless mode. No application window will be created\n" "-prepass Use light pre-pass rendering\n" "-deferred Use deferred rendering\n" "-lqshadows Use low-quality (1-sample) shadow filtering\n" "-noshadows Disable shadow rendering\n" "-nolimit Disable frame limiter\n" "-nothreads Disable worker threads\n" "-nosound Disable sound output\n" "-noip Disable sound mixing interpolation\n" "-sm2 Force SM2.0 rendering\n" #endif ); } }
void Urho3DPlayer::GetScriptFileName() { const Vector<String>& arguments = GetArguments(); if (arguments.Size() && arguments[0][0] != '-') scriptFileName_ = GetInternalPath(arguments[0]); }
void FileWatcher::ThreadFunction() { #if defined(ENABLE_FILEWATCHER) #if defined(WIN32) unsigned char buffer[BUFFERSIZE]; DWORD bytesFilled = 0; while (shouldRun_) { if (ReadDirectoryChangesW((HANDLE)dirHandle_, buffer, BUFFERSIZE, watchSubDirs_, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, &bytesFilled, 0, 0)) { unsigned offset = 0; while (offset < bytesFilled) { FILE_NOTIFY_INFORMATION* record = (FILE_NOTIFY_INFORMATION*)&buffer[offset]; if (record->Action == FILE_ACTION_MODIFIED || record->Action == FILE_ACTION_RENAMED_NEW_NAME) { String fileName; const wchar_t* src = record->FileName; const wchar_t* end = src + record->FileNameLength / 2; while (src < end) fileName.AppendUTF8(String::DecodeUTF16(src)); fileName = GetInternalPath(fileName); AddChange(fileName); } if (!record->NextEntryOffset) break; else offset += record->NextEntryOffset; } } } #elif defined(__linux__) unsigned char buffer[BUFFERSIZE]; while (shouldRun_) { int i = 0; int length = read(watchHandle_, buffer, sizeof(buffer)); if (length < 0) return; while (i < length) { inotify_event* event = (inotify_event*)&buffer[i]; if (event->len > 0) { if (event->mask & IN_MODIFY || event->mask & IN_MOVE) { String fileName; fileName = dirHandle_[event->wd] + event->name; AddChange(fileName); } } i += sizeof(inotify_event) + event->len; } } #elif defined(__APPLE__) && !defined(IOS) while (shouldRun_) { Time::Sleep(100); String changes = ReadFileWatcher(watcher_); if (!changes.Empty()) { Vector<String> fileNames = changes.Split(1); for (unsigned i = 0; i < fileNames.Size(); ++i) AddChange(fileNames[i]); } } #endif #endif }