Exemplo n.º 1
0
 public BundleInfo CachedBundleInfo(string path, UInt64 lastWriteTime = 0)
 {
     if (lastWriteTime == 0)
     {
         if (!DirScan.GetFileAttributesEx(path, GET_FILEEX_INFO_LEVELS.GetFileExInfoStandard, out WIN32_FILE_ATTRIBUTE_DATA fa))
         {
             throw new Exception(path + ": " + new Win32Exception().Message);
         }
         lastWriteTime = fa.ftLastWriteTime.ToUInt64();
     }
     if (!Bundles.TryGetValue(path.ToUpperInvariant(), out BundleInfo info))
     {
         Bundles.Add(path.ToUpperInvariant(), info = new BundleInfo()
         {
             path = path
         });
     }
     else if (info.lastWriteTime == lastWriteTime)
     {
         return(info);
     }
     info.lastWriteTime = lastWriteTime;
     BundleFile.ReadBundleFile(path, out List <string> materials, out List <string> gameObjects);
     info.materials = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
     foreach (var material in materials)
     {
         if (info.materials.ContainsKey(material.ToLowerInvariant()))
         {
             Logger("WARNING: Bundle " + path + " contains multiple versions of " + material);
         }
         else
         {
             info.materials.Add(material.ToLowerInvariant(), material);
         }
     }
     info.gameObjects = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
     foreach (var gameObject in gameObjects)
     {
         if (gameObject.StartsWith("entity_", StringComparison.OrdinalIgnoreCase))
         {
             info.gameObjects.Add(gameObject);
         }
     }
     return(info);
 }