Kaynağa Gözat

Folders that autoload subfolders/paks on load

Chris Friesen 11 yıl önce
ebeveyn
işleme
873cef9840

+ 0 - 0
Bin/Extra/placeholder.txt


+ 1 - 0
Docs/GettingStarted.dox

@@ -221,6 +221,7 @@ The engine can be configured using the following command line options.
 -b <length>  Sound buffer length in milliseconds
 -r <freq>    Sound mixing frequency in Hz
 -p <paths>   Resource path(s) to use, separated by semicolons
+-ap <paths>  Autoload resource path(s) to use, separated by semicolons
 -log <level> Change the log level, valid 'level' values are 'debug', 'info', 'warning', 'error'
 -ds <file>   Dump used shader variations to a file for precaching
 -mq <level>  Material quality level, default 2 (high)

+ 62 - 0
Source/Engine/Engine/Engine.cpp

@@ -184,6 +184,7 @@ bool Engine::Initialize(const VariantMap& parameters)
 
     Vector<String> resourcePaths = GetParameter(parameters, "ResourcePaths", "CoreData;Data").GetString().Split(';');
     Vector<String> resourcePackages = GetParameter(parameters, "ResourcePackages").GetString().Split(';');
+    Vector<String> autoloadFolders = GetParameter(parameters, "AutoloadPaths", "Extra").GetString().Split(';');
 
     for (unsigned i = 0; i < resourcePaths.Size(); ++i)
     {
@@ -246,6 +247,62 @@ bool Engine::Initialize(const VariantMap& parameters)
             return false;
         }
     }
+    
+    // Add auto load folders
+    for (unsigned i = 0; i < autoloadFolders.Size(); ++i)
+    {
+        bool success = true;
+        String autoloadFolder = autoloadFolders[i];
+        String badResource;
+        if(fileSystem->DirExists(autoloadFolder))
+        {
+            Vector<String> folders;
+            fileSystem->ScanDir(folders, autoloadFolder, "*", SCAN_DIRS, false);
+            for(unsigned y = 0; y < folders.Size(); ++y)
+            {
+                String folder = folders[y];
+                if (folder.StartsWith("."))
+                    continue;
+                
+                String autoResourceDir = exePath + autoloadFolder + "/" + folder;
+                success = cache->AddResourceDir(autoResourceDir);
+                if (!success)
+                {
+                    badResource = folder;
+                    break;
+                }
+            }
+            
+            if (success)
+            {
+                Vector<String> paks;
+                fileSystem->ScanDir(paks, autoloadFolder, "*.pak", SCAN_FILES, false);
+                for(unsigned y = 0; y < paks.Size(); ++y)
+                {
+                    String pak = paks[y];
+                    if (pak.StartsWith("."))
+                        continue;
+                    
+                    String autoResourcePak = exePath + autoloadFolder + "/" + pak;
+                    SharedPtr<PackageFile> package(new PackageFile(context_));
+                    if (package->Open(autoResourcePak))
+                        cache->AddPackageFile(package);
+                    else
+                    {
+                        badResource = autoResourcePak;
+                        success = false;
+                        break;
+                    }
+                }
+            }
+        }
+        
+        if(!success)
+        {
+            LOGERROR("Failed to add resource " + badResource + " in autoload folder " + autoloadFolders[i]);
+            return false;
+        }
+    }
 
     // Initialize graphics & audio output
     if (!headless_)
@@ -705,6 +762,11 @@ VariantMap Engine::ParseParameters(const Vector<String>& arguments)
                 ret["ResourcePaths"] = value;
                 ++i;
             }
+            else if (argument == "ap" && !value.Empty())
+            {
+                ret["AutoloadPaths"] = value;
+                ++i;
+            }
             else if (argument == "ds" && !value.Empty())
             {
                 ret["DumpShaders"] = value;

+ 1 - 0
Source/Tools/Urho3DPlayer/Urho3DPlayer.cpp

@@ -92,6 +92,7 @@ void Urho3DPlayer::Setup()
             "-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"