Beispiel #1
0
        public override ExportPointer CreateExportPointer(Object asset, bool isLocal)
        {
            if (isLocal)
            {
                throw new NotSupportedException();
            }

            MonoScript script = m_scripts[asset];

            if (s_unityEngine.IsMatch(script.AssemblyName))
            {
                if (MonoScript.IsReadNamespace(script.File.Version))
                {
                    int fileID = Compute(script.Namespace, script.Name);
                    return(new ExportPointer(fileID, UnityEngineGUID, AssetExporter.ToExportType(asset)));
                }
                else
                {
                    ScriptInfo scriptInfo = script.GetScriptInfo();
                    if (scriptInfo != default)
                    {
                        int fileID = Compute(scriptInfo.Namespace, scriptInfo.Name);
                        return(new ExportPointer(fileID, UnityEngineGUID, AssetExporter.ToExportType(asset)));
                    }
                }
            }

            long       exportID   = GetExportID(asset);
            EngineGUID uniqueGUID = script.GUID;

            return(new ExportPointer(exportID, uniqueGUID, AssetExporter.ToExportType(asset)));
        }
 public OcclusionScene(EngineGUID scene, int renderSize, int portalSize)
 {
     Scene          = scene;
     IndexRenderers = 0;
     SizeRenderers  = renderSize;
     IndexPortals   = 0;
     SizePortals    = portalSize;
 }
        public T CreateAsset <T>(EngineGUID guid, Func <AssetInfo, T> instantiator)
            where T : Object
        {
            ClassIDType classID   = typeof(T).ToClassIDType();
            AssetInfo   assetInfo = new AssetInfo(this, ++m_nextId, classID, guid);
            T           instance  = instantiator(assetInfo);

            m_assets.Add(instance.PathID, instance);
            return(instance);
        }
Beispiel #4
0
        public Scene(string path, EngineGUID guid)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            Enabled = true;
            Path    = path;
            GUID    = guid;
        }
Beispiel #5
0
        public AssetInfo(ISerializedFile serializedFile, long pathID, ClassIDType classID, EngineGUID guid)
        {
            if (serializedFile == null)
            {
                throw new ArgumentNullException(nameof(serializedFile));
            }
            File = serializedFile;

            PathID  = pathID;
            ClassID = classID;
            GUID    = guid;
        }
Beispiel #6
0
        public override ExportPointer CreateExportPointer(Object asset, bool isLocal)
        {
            if (isLocal)
            {
                throw new NotSupportedException();
            }

            ulong      exportID   = GetExportID(asset);
            EngineGUID uniqueGUID = m_scripts[asset].GUID;

            return(new ExportPointer(exportID, uniqueGUID, AssetExporter.ToExportType(asset)));
        }
        public override ExportPointer CreateExportPointer(Object asset, bool isLocal)
        {
            long exportID = GetExportID(asset);

            if (isLocal && IsComponent(asset))
            {
                return(new ExportPointer(exportID));
            }
            else
            {
                EngineGUID guid = IsComponent(asset) ? GUID : asset.GUID;
                return(new ExportPointer(exportID, guid, AssetType.Serialized));
            }
        }
Beispiel #8
0
        public Meta(IAssetImporter importer, EngineGUID guid)
        {
            if (importer == null)
            {
                throw new ArgumentNullException(nameof(importer));
            }
            if (guid.IsZero)
            {
                throw new ArgumentNullException(nameof(guid));
            }

            m_importer = importer;
            m_guid     = guid;
        }
        public SceneExportCollection(IAssetExporter assetExporter, ISerializedFile file)
        {
            if (assetExporter == null)
            {
                throw new ArgumentNullException(nameof(assetExporter));
            }
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            AssetExporter = assetExporter;
            Name          = file.Name;
            m_file        = file;

            foreach (Object asset in file.FetchAssets())
            {
                if (OcclusionCullingSettings.IsCompatible(asset))
                {
                    AddComponent(file, asset);
                }
            }
            m_cexportIDs = m_cexportIDs.OrderBy(t => t.Key, this).ToDictionary(t => t.Key, t => t.Value);

            if (OcclusionCullingSettings.IsReadSceneGUID(file.Version))
            {
                OcclusionCullingSettings sceneSettings = Components.Where(t => t.ClassID == ClassIDType.OcclusionCullingSettings).Select(t => (OcclusionCullingSettings)t).FirstOrDefault();
                if (sceneSettings == null)
                {
                    GUID = new EngineGUID(Guid.NewGuid());
                }
                else
                {
                    GUID = sceneSettings.SceneGUID;
                }
            }
            else
            {
                if (Config.IsGenerateGUIDByContent)
                {
                    GUID = ObjectUtils.CalculateObjectsGUID(Assets);
                }
                else
                {
                    GUID = new EngineGUID(Guid.NewGuid());
                }
            }
        }
        public ExportPointer CreateExportPointer(Object asset, bool isLocal)
        {
            if (isLocal)
            {
                throw new NotSupportedException();
            }
            GetEngineBuildInAsset(asset, m_version, out EngineBuiltInAsset engneAsset);
            if (!engneAsset.IsValid)
            {
                throw new NotImplementedException($"Unknown ExportID for asset {asset.ToLogString()} from file {asset.File.Name}");
            }
            long       exportID = engneAsset.ExportID;
            EngineGUID guid     = engneAsset.GUID;

            return(new ExportPointer(exportID, guid, AssetType.Internal));
        }
Beispiel #11
0
 public ExportPointer(long fileID, EngineGUID guid, AssetType assetType)
 {
     FileID    = fileID;
     GUID      = guid;
     AssetType = assetType;
 }
        public SceneExportCollection(IAssetExporter assetExporter, VirtualSerializedFile virtualFile, ISerializedFile file)
        {
            if (assetExporter == null)
            {
                throw new ArgumentNullException(nameof(assetExporter));
            }
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            AssetExporter = assetExporter;
            Name          = file.Name;
            m_file        = file;

            foreach (Object asset in file.FetchAssets())
            {
                if (OcclusionCullingSettings.IsSceneCompatible(asset))
                {
                    AddComponent(file, asset);
                }
            }
            m_cexportIDs = m_cexportIDs.OrderBy(t => t.Key, this).ToDictionary(t => t.Key, t => t.Value);

            if (OcclusionCullingSettings.IsReadSceneGUID(file.Version))
            {
                OcclusionCullingSettings sceneSettings = Components.Where(t => t.ClassID == ClassIDType.OcclusionCullingSettings).Select(t => (OcclusionCullingSettings)t).FirstOrDefault();
                if (sceneSettings != null)
                {
                    GUID = sceneSettings.SceneGUID;
                }
            }
            if (GUID.IsZero)
            {
                if (Config.IsGenerateGUIDByContent)
                {
                    GUID = ObjectUtils.CalculateAssetsGUID(Assets);
                }
                else
                {
                    GUID = new EngineGUID(Guid.NewGuid());
                }
            }

            if (OcclusionCullingSettings.IsReadPVSData(File.Version))
            {
                foreach (Object comp in Components)
                {
                    if (comp.ClassID == ClassIDType.OcclusionCullingSettings)
                    {
                        OcclusionCullingSettings settings = (OcclusionCullingSettings)comp;
                        if (settings.PVSData.Count > 0)
                        {
                            m_occlusionCullingSettings = settings;
                            OcclusionCullingData       = OcclusionCullingData.CreateVirtualInstance(virtualFile, settings);
                            break;
                        }
                    }
                }
            }
        }
        private GameStructureExporter(ExportSettings settings, List <string> files, Func <uTinyRipper.Classes.Object, bool> filter = null)
        {
            GameDir    = settings.GameDir;
            ExportPath = settings.ExportDir;
            options    = new ExportOptions()
            {
                Version  = new Version(2017, 3, 0, VersionType.Final, 3),
                Platform = Platform.NoTarget,
                Flags    = TransferInstructionFlags.NoTransferInstructionFlags,
            };
            m_GameStructure = GameStructure.Load(files);
            if (filter != null)
            {
                Filter = filter;
            }
            else
            {
                Filter = (obj) => true;
            }
            var fileCollection  = m_GameStructure.FileCollection;
            var textureExporter = new TextureAssetExporter();
            var engineExporter  = new EngineAssetExporter();

            fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new CustomShaderAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter); //engine or texture exporter?
            fileCollection.Exporter.EventExportStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted");
                UpdateTitle($"EventExportStarted");
            };
            fileCollection.Exporter.EventExportPreparationStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted");
                UpdateTitle($"EventExportPreparationStarted");
            };
            fileCollection.Exporter.EventExportPreparationFinished += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished");
                UpdateTitle($"EventExportPreparationFinished");
            };
            fileCollection.Exporter.EventExportFinished += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished");
                UpdateTitle($"EventExportFinished");
            };
            fileCollection.Exporter.EventExportStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted");
                UpdateTitle($"EventExportStarted");
            };
            fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) =>
            {
                UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}");
            };
            if (settings.ScriptByName)
            {
                foreach (var asset in fileCollection.FetchAssets())
                {
                    if (asset is MonoScript script)
                    {
                        using (MD5 md5 = MD5.Create())
                        {
                            var data    = md5.ComputeHash(Encoding.UTF8.GetBytes($"{script.AssemblyName}.{script.Namespace}.{script.ClassName}"));
                            var newGuid = new Guid(data);
                            Util.SetGUID(script, newGuid);
                        }
                    }
                }
            }
            if (settings.ShaderByName)
            {
                foreach (var asset in fileCollection.FetchAssets())
                {
                    if (asset is Shader shader)
                    {
                        using (MD5 md5 = MD5.Create())
                        {
                            var data    = md5.ComputeHash(Encoding.UTF8.GetBytes($"{shader.ValidName}"));
                            var newGuid = new Guid(data);
                            var engGuid = new EngineGUID(newGuid);
                            Util.SetGUID(shader, newGuid);
                            Console.WriteLine($"Set shader {shader.ValidName} to Guid {engGuid}");
                        }
                    }
                }
            }
        }
Beispiel #14
0
 public ExportPointer(ulong fileID, EngineGUID guid, AssetType assetType) :
     this(fileID)
 {
     GUID      = guid;
     AssetType = assetType;
 }
Beispiel #15
0
        public GameStructureExporter(ExportSettings settings, List <string> files, Func <uTinyRipper.Classes.Object, bool> filter = null)
        {
            GameDir    = settings.GameDir;
            ExportPath = settings.ExportDir;
            options    = new ExportOptions()
            {
                Platform = Platform.NoTarget,
                Flags    = TransferInstructionFlags.NoTransferInstructionFlags,
            };
            GameStructure = GameStructure.Load(files);

            if (string.IsNullOrEmpty(settings.ExportVersion))
            {
                options.Version = new Version(2017, 3, 0, VersionType.Final, 3);
            }
            else if (settings.ExportVersion.ToLower() == "detect")
            {
                //The version in unity default resources and unity_builtin_extra seem to differ from the game version
                var versionCheckFile = GameStructure.FileCollection.Files.FirstOrDefault(f => !Path.GetFileName(f.Name).Contains("unity"));
                if (versionCheckFile != null)
                {
                    options.Version = versionCheckFile.Version;
                    Logger.Log(LogType.Info, LogCategory.Export, $"Version detected as {options.Version.ToString()}");
                }
                else
                {
                    Logger.Log(LogType.Warning, LogCategory.Export, $"Could not detect version");
                    options.Version = new Version(2017, 3, 0, VersionType.Final, 3);
                }
            }
            else
            {
                options.Version = new Version();
                options.Version.Parse(settings.ExportVersion);
                Logger.Log(LogType.Info, LogCategory.Export, $"Version set to {options.Version.ToString()}");
            }
            if (filter != null)
            {
                Filter = filter;
            }
            else
            {
                Filter = (obj) => true;
            }
            var fileCollection  = GameStructure.FileCollection;
            var textureExporter = new TextureAssetExporter();
            var engineExporter  = new EngineAssetExporter();

            fileCollection.Exporter.OverrideExporter(ClassIDType.Material, engineExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Mesh, engineExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Shader, new CustomShaderAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.TextAsset, new TextAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.AudioClip, new AudioAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.Font, new FontAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.MovieTexture, new MovieTextureAssetExporter());
            fileCollection.Exporter.OverrideExporter(ClassIDType.Texture2D, textureExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Cubemap, textureExporter);
            fileCollection.Exporter.OverrideExporter(ClassIDType.Sprite, engineExporter);             //engine or texture exporter?
            fileCollection.Exporter.EventExportStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted");
                UpdateTitle($"EventExportStarted");
            };
            fileCollection.Exporter.EventExportPreparationStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationStarted");
                UpdateTitle($"EventExportPreparationStarted");
            };
            fileCollection.Exporter.EventExportPreparationFinished += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportPreparationFinished");
                UpdateTitle($"EventExportPreparationFinished");
            };
            fileCollection.Exporter.EventExportFinished += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportFinished");
                UpdateTitle($"EventExportFinished");
            };
            fileCollection.Exporter.EventExportStarted += () =>
            {
                Logger.Log(LogType.Info, LogCategory.Export, "EventExportStarted");
                UpdateTitle($"EventExportStarted");
            };
            fileCollection.Exporter.EventExportProgressUpdated += (int number, int total) =>
            {
                UpdateTitle($"Exported {number / (float)total * 100:0.#} - {number} of {total}");
            };
            if (settings.ScriptByName)
            {
                foreach (var asset in fileCollection.FetchAssets())
                {
                    if (asset is MonoScript script)
                    {
                        using (MD5 md5 = MD5.Create())
                        {
                            var data    = md5.ComputeHash(Encoding.UTF8.GetBytes($"{script.AssemblyName}.{script.Namespace}.{script.ClassName}"));
                            var newGuid = new Guid(data);
                            Util.SetGUID(script, newGuid);
                        }
                    }
                }
            }
            if (settings.ShaderByName)
            {
                foreach (var asset in fileCollection.FetchAssets())
                {
                    if (asset is Shader shader)
                    {
                        using (MD5 md5 = MD5.Create())
                        {
                            var data    = md5.ComputeHash(Encoding.UTF8.GetBytes($"{shader.ValidName}"));
                            var newGuid = new Guid(data);
                            var engGuid = new EngineGUID(newGuid);
                            Util.SetGUID(shader, newGuid);
                            Console.WriteLine($"Set shader {shader.ValidName} to Guid {engGuid}");
                        }
                    }
                }
            }
        }