diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildConfig_Custom.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildConfig_Custom.cs index e2c6a7d2..b1c2b52f 100644 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildConfig_Custom.cs +++ b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildConfig_Custom.cs @@ -10,7 +10,6 @@ namespace HybridCLR.Editor /// public static List HotUpdateAssemblies { get; } = new List { - "TEngine.Runtime.dll", "HotFix.dll", }; diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors.meta deleted file mode 100644 index 3d9bcb51..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5d7e4bb1668e0b341b9613b967e27f88 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs deleted file mode 100644 index 68bed9ec..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEditor; -using UnityEditor.Build; -using UnityEditor.Build.Reporting; -using UnityEditor.Il2Cpp; -using UnityEditor.UnityLinker; -using UnityEngine; - -namespace HybridCLR.Editor.BuildProcessors -{ - internal class BPCopyStrippedAOTAssemblies : IPostprocessBuildWithReport -#if !UNITY_2021_1_OR_NEWER - , IIl2CppProcessor -#endif - { - - public int callbackOrder => 0; - -#if UNITY_2021_1_OR_NEWER - public static string GetStripAssembliesDir2021(BuildTarget target) - { - string projectDir = BuildConfig.ProjectDir; -#if UNITY_STANDALONE_WIN - return $"{projectDir}/Library/Bee/artifacts/WinPlayerBuildProgram/ManagedStripped"; -#elif UNITY_ANDROID - return $"{projectDir}/Library/Bee/artifacts/Android/ManagedStripped"; -#elif UNITY_IOS - return $"{projectDir}/Temp/StagingArea/Data/Managed/tempStrip"; -#elif UNITY_WEBGL - return $"{projectDir}/Library/Bee/artifacts/WebGL/ManagedStripped"; -#elif UNITY_EDITOR_OSX - return $"{projectDir}/Library/Bee/artifacts/MacStandalonePlayerBuildProgram/ManagedStripped"; -#else - throw new NotSupportedException("GetOriginBuildStripAssembliesDir"); -#endif - } -#else - private string GetStripAssembliesDir2020(BuildTarget target) - { - string subPath = target == BuildTarget.Android ? - "assets/bin/Data/Managed" : - "Data/Managed/"; - return $"{BuildConfig.ProjectDir}/Temp/StagingArea/{subPath}"; - } - - public void OnBeforeConvertRun(BuildReport report, Il2CppBuildPipelineData data) - { - // 此回调只在 2020中调用 - CopyStripDlls(GetStripAssembliesDir2020(data.target), data.target); - } -#endif - - public static void CopyStripDlls(string srcStripDllPath, BuildTarget target) - { - Debug.Log($"[BPCopyStrippedAOTAssemblies] CopyScripDlls. src:{srcStripDllPath} target:{target}"); - - var dstPath = BuildConfig.GetAssembliesPostIl2CppStripDir(target); - - Directory.CreateDirectory(dstPath); - - //string srcStripDllPath = BuildConfig.GetOriginBuildStripAssembliesDir(target); - - foreach (var fileFullPath in Directory.GetFiles(srcStripDllPath, "*.dll")) - { - var file = Path.GetFileName(fileFullPath); - Debug.Log($"[BPCopyStrippedAOTAssemblies] copy strip dll {fileFullPath} ==> {dstPath}/{file}"); - File.Copy($"{fileFullPath}", $"{dstPath}/{file}", true); - } - } - - public void OnPostprocessBuild(BuildReport report) - { -#if UNITY_2021_1_OR_NEWER && !UNITY_IOS - BuildTarget target = EditorUserBuildSettings.activeBuildTarget; - CopyStripDlls(GetStripAssembliesDir2021(target), target); -#endif - } - } -} diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs.meta deleted file mode 100644 index 3ebc0e10..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPCopyStrippedAOTAssemblies.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f7884710ec2f8e545b3fe9aa05def5a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs deleted file mode 100644 index 30eb4205..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEditor; -using UnityEditor.Build; -using UnityEngine; - -namespace HybridCLR.Editor.BuildProcessors -{ - /// - /// 将热更新dll从Build过程中过滤,防止打包到主工程中 - /// - internal class BPFilterHotFixAssemblies : IFilterBuildAssemblies - { - public int callbackOrder => 0; - - public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies) - { - List allHotUpdateDllNames = BuildConfig.HotUpdateAssemblies; - - // 检查是否重复填写 - var hotUpdateDllSet = new HashSet(); - foreach(var hotUpdateDll in allHotUpdateDllNames) - { - if (!hotUpdateDllSet.Add(hotUpdateDll)) - { - throw new Exception($"热更新 assembly:{hotUpdateDll} 在列表中重复,请除去重复条目"); - } - } - - // 检查是否填写了正确的dll名称 - foreach (var hotUpdateDll in BuildConfig.HotUpdateAssemblies) - { - if (assemblies.All(ass => !ass.EndsWith(hotUpdateDll))) - { - throw new Exception($"热更新 assembly:{hotUpdateDll} 不存在,请检查拼写错误"); - } - Debug.Log($"[BPFilterHotFixAssemblies] 过滤热更新assembly:{hotUpdateDll}"); - } - - // 将热更dll从打包列表中移除 - return assemblies.Where(ass => BuildConfig.HotUpdateAssemblies.All(dll => !ass.EndsWith(dll, StringComparison.OrdinalIgnoreCase))).ToArray(); - } - } -} diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs.meta deleted file mode 100644 index 2ab4ba54..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPFilterHotFixAssemblies.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9dec2922e3df5464aa047b636eb19e0d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs deleted file mode 100644 index d27eadac..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs +++ /dev/null @@ -1,148 +0,0 @@ -using HybridCLR.Editor.GlobalManagers; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using UnityEditor; -using UnityEditor.Android; -using UnityEditor.Build; -using UnityEditor.Build.Reporting; -using UnityEditor.Il2Cpp; -using UnityEditor.UnityLinker; -using UnityEngine; - -namespace HybridCLR.Editor.BuildProcessors -{ - public class BPPatchScriptAssembliesJson : IPreprocessBuildWithReport, -#if UNITY_ANDROID - IPostGenerateGradleAndroidProject, -#endif - IPostprocessBuildWithReport - { - public int callbackOrder => 0; - - - [Serializable] - private class ScriptingAssemblies - { - public List names; - public List types; - } - - public void OnPostGenerateGradleAndroidProject(string path) - { - // 如果直接打包apk,没有机会在PostprocessBuild中修改ScriptingAssemblies.json。 - // 因此需要在这个时机处理 - PathScriptingAssembilesFile(path); - } - - public void OnPostprocessBuild(BuildReport report) - { - // 如果target为Android,由于已经在OnPostGenerateGradelAndroidProject中处理过, - // 这里不再重复处理 -#if !UNITY_ANDROID - - PathScriptingAssembilesFile(report.summary.outputPath); -#endif - } - - private void PathScriptingAssembilesFile(string path) - { -#if UNITY_2020_1_OR_NEWER - AddHotFixAssembliesToScriptingAssembliesJson(path); -#else - AddBackHotFixAssembliesToBinFile(path); -#endif - } - - private void AddHotFixAssembliesToScriptingAssembliesJson(string path) - { - Debug.Log($"AddBackHotFixAssembliesToJson. path:{path}"); - if (!Directory.Exists(path)) - { - path = Directory.GetParent(path).ToString(); - } - /* - * ScriptingAssemblies.json 文件中记录了所有的dll名称,此列表在游戏启动时自动加载, - * 不在此列表中的dll在资源反序列化时无法被找到其类型 - * 因此 OnFilterAssemblies 中移除的条目需要再加回来 - */ - string[] jsonFiles = Directory.GetFiles(path, BuildConfig.ScriptingAssembliesJsonFile, SearchOption.AllDirectories); - - if (jsonFiles.Length == 0) - { - Debug.LogError($"can not find file {BuildConfig.ScriptingAssembliesJsonFile}"); - return; - } - - foreach (string file in jsonFiles) - { - string content = File.ReadAllText(file); - ScriptingAssemblies scriptingAssemblies = JsonUtility.FromJson(content); - foreach (string name in BuildConfig.HotUpdateAssemblies) - { - if (!scriptingAssemblies.names.Contains(name)) - { - scriptingAssemblies.names.Add(name); - scriptingAssemblies.types.Add(16); // user dll type - Debug.Log($"[PatchScriptAssembliesJson] add hotfix assembly:{name} to {file}"); - } - } - content = JsonUtility.ToJson(scriptingAssemblies); - - File.WriteAllText(file, content); - } - } - - private void AddBackHotFixAssembliesToBinFile(string path) - { - /* - * Unity2019 中 dll 加载列表存储在 globalgamemanagers 文件中,此列表在游戏启动时自动加载, - * 不在此列表中的dll在资源反序列化时无法被找到其类型 - * 因此 OnFilterAssemblies 中移除的条目需要再加回来 - */ -#if UNITY_ANDROID - string[] binFiles = new string[] { "Temp/gradleOut/unityLibrary/src/main/assets/bin/Data/globalgamemanagers" }; // report.files 不包含 Temp/gradleOut 等目录 -#else - // 直接出包和输出vs工程时路径不同,report.summary.outputPath 记录的是前者路径 - string[] binFiles = Directory.GetFiles(Path.GetDirectoryName(path), "globalgamemanagers", SearchOption.AllDirectories); -#endif - - if (binFiles.Length == 0) - { - Debug.LogError("can not find file ScriptingAssemblies.json"); - return; - } - - foreach (string binPath in binFiles) - { - var binFile = new UnityBinFile(); - binFile.LoadFromFile(binPath); - - ScriptsData scriptsData = binFile.scriptsData; - foreach (string name in BuildConfig.HotUpdateAssemblies) - { - if (!scriptsData.dllNames.Contains(name)) - { - scriptsData.dllNames.Add(name); - scriptsData.dllTypes.Add(16); // user dll type - } - } - binFile.scriptsData = scriptsData; - - binFile.RebuildAndFlushToFile(binPath); - } - } - -#region useless - - public void OnPreprocessBuild(BuildReport report) - { - - } - -#endregion - } -} diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs.meta deleted file mode 100644 index 0affdc71..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/BPPatchScriptAssembliesJson.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9bb6e2908d8948648979c9ff6bb7937d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader.meta deleted file mode 100644 index 7cabb704..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e52fb09e14efee949ae80ae8aa9f9d44 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs deleted file mode 100644 index f389e351..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using System.Text; -using System.Reflection; -using System; -using System.Linq; - -namespace HybridCLR.Editor.GlobalManagers -{ - /// - /// Unity 生成的二进制文件(本代码不支持5.x之前的版本) - /// - public unsafe class UnityBinFile - { - /* - * MonoManager: idx: 6; - * type: metaData.types[objects[6].typeID] - */ - public const int kMonoManagerIdx = 6; - - public string path { get; private set; } - - public FileHeader header; - public MetaData metaData; - public ScriptsData scriptsData; - - public void LoadFromFile(string path) - { - this.path = path; - - var fs = new FileStream(path, FileMode.Open, FileAccess.Read); - var br = new BinaryReader(fs, Encoding.UTF8, true); - - header.LoadFromStream(br); - // 按理说 metaData 应该新开一个buffer来避免加载时的对齐逻辑问题,但由于 sizeof(Header) = 20,已经对齐到4了,所以可以连续读 - metaData.LoadFromStream(br, header.dataOffset); - scriptsData = metaData.GetScriptData(br); - - br.Close(); - fs.Close(); - } - - public void RebuildAndFlushToFile(string newPath) - { - var fsR = new FileStream(path, FileMode.Open, FileAccess.Read); - var brR = new BinaryReader(fsR, Encoding.UTF8, true); - - var ms = new MemoryStream((int)(header.fileSize * 1.5f)); - var bw = new BinaryWriter(ms, Encoding.UTF8, true); - - /* - * 开始写入data - * dll名称列表存储于 data 区段,修改其数据并不会影响 MetaData 大小,因此 dataOffset 不会改变 - */ - ms.Position = header.dataOffset; - - Dictionary newObjInfos = new Dictionary(); - foreach (var kv in metaData.objects) - { - long objID = kv.Key; - ObjectInfo objInfo = kv.Value; - - byte[] buff = new byte[objInfo.size]; - fsR.Position = objInfo.realPos; - brR.Read(buff, 0, buff.Length); - - - {// unity 的数据偏移貌似会对齐到 8 - int newPos = (((int)ms.Position + 7) >> 3) << 3; - int gapSize = newPos - (int)ms.Position; - - for (int i = 0; i < gapSize; i++) - bw.Write((byte)0); - - objInfo.dataPos = (uint)ms.Position - header.dataOffset; // 重定位数据偏移 - } - - if (objID != kMonoManagerIdx) - bw.Write(buff, 0, buff.Length); - else - objInfo.size = (uint)scriptsData.SaveToStream(bw); - - newObjInfos.Add(objID, objInfo); - } - - metaData.objects = newObjInfos; - header.fileSize = (uint)ms.Position; - - ms.Position = 0; - header.SaveToStream(bw); - metaData.SaveToStream(bw); - - brR.Close(); - fsR.Close(); - - // 写入新文件 - ms.Position = 0; - File.WriteAllBytes(newPath, ms.ToArray()); - - bw.Close(); - ms.Close(); - } - } - -} diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs.meta deleted file mode 100644 index e53b7420..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ae7ec6e3674077d46898fe821d24bf85 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs deleted file mode 100644 index 48a7920b..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs +++ /dev/null @@ -1,397 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using static HybridCLR.Editor.GlobalManagers.UnityBinUtils; - -namespace HybridCLR.Editor.GlobalManagers -{ - public struct FileHeader - { - public const int kSize = 20; - - public uint dataSize => fileSize - metadataSize; - - public uint metadataSize; - public uint fileSize; - public uint version; - public uint dataOffset; - public byte endianess; - - public void LoadFromStream(BinaryReader br) - { - long startPos = br.BaseStream.Position; - metadataSize = br.ReadUInt32(); - fileSize = br.ReadUInt32(); - version = br.ReadUInt32(); - dataOffset = br.ReadUInt32(); - endianess = br.ReadByte(); - br.BaseStream.Position = startPos + kSize; - - SwapEndianess(); - } - - public long SaveToStream(BinaryWriter bw) - { - SwapEndianess(); - - long startPos = bw.BaseStream.Position; - bw.Write(metadataSize); - bw.Write(fileSize); - bw.Write(version); - bw.Write(dataOffset); - bw.Write(endianess); - bw.BaseStream.Position = startPos + kSize; - return kSize; - } - - void SwapEndianess() - { - SwapUInt(ref metadataSize); - SwapUInt(ref fileSize); - SwapUInt(ref version); - SwapUInt(ref dataOffset); - } - } - - public struct MetaData - { - public long dataStartPos; - - public string version; - public uint platform; - public bool enableTypeTree; - public int typeCount; - public ObjectType[] types; - public int objectCount; - public Dictionary objects; - public int scriptTypeCount; - public ScriptType[] scriptTypes; - public int externalsCount; - public ExternalInfo[] externals; - -#if UNITY_2019_2_OR_NEWER - public int refTypeCount; - public ObjectType[] refTypes; -#endif - public string dummyStr; - - public void LoadFromStream(BinaryReader br, uint dataOffset) - { - long startPos = br.BaseStream.Position; - dataStartPos = startPos; - - version = br.ReadRawString(); - platform = br.ReadUInt32(); - enableTypeTree = br.ReadBoolean(); - typeCount = br.ReadInt32(); - types = new ObjectType[typeCount]; - - for (int i = 0; i < typeCount; i++) - { - types[i].LoadFromStream(br); - } - - objectCount = br.ReadInt32(); - objects = new Dictionary(); - for(int i = 0; i < objectCount; i++) - { - long id = br.AlignedReadInt64(); - ObjectInfo objInfo = new ObjectInfo(); - objInfo.LoadFromStream(br); - objInfo.realPos = objInfo.dataPos + dataOffset; - - objects.Add(id, objInfo); - } - - scriptTypeCount = br.ReadInt32(); - scriptTypes = new ScriptType[scriptTypeCount]; - for(int i = 0; i < scriptTypeCount; i++) - { - scriptTypes[i].LoadFromStream(br); - } - - externalsCount = br.ReadInt32(); - externals = new ExternalInfo[externalsCount]; - for(int i = 0; i < externalsCount; i++) - { - externals[i].LoadFromStream(br); - } - -#if UNITY_2019_2_OR_NEWER - refTypeCount = br.ReadInt32(); - refTypes = new ObjectType[refTypeCount]; - for(int i = 0; i < refTypeCount; i++) - { - refTypes[i].LoadFromStream(br); - } -#endif - dummyStr = br.ReadRawString(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.WriteRawString(version); - bw.Write(platform); - bw.Write(enableTypeTree); - - bw.Write(typeCount); - foreach(var type in types) - type.SaveToStream(bw); - - bw.Write(objectCount); - foreach (var kv in objects) - { - bw.AlignedWriteInt64(kv.Key); - kv.Value.SaveToStream(bw); - } - - bw.Write(scriptTypeCount); - foreach(var st in scriptTypes) - st.SaveToStream(bw); - - bw.Write(externalsCount); - foreach(var external in externals) - external.SaveToStream(bw); - -#if UNITY_2019_2_OR_NEWER - bw.Write(refTypeCount); - foreach(var refT in refTypes) - refT.SaveToStream(bw); -#endif - - bw.WriteRawString(dummyStr); - - return bw.BaseStream.Position - startPos; - } - - public ScriptsData GetScriptData(BinaryReader br) - { - ObjectInfo objInfo = objects[UnityBinFile.kMonoManagerIdx]; - br.BaseStream.Seek(objInfo.realPos, SeekOrigin.Begin); - - ScriptsData data = new ScriptsData(); - data.LoadFromStream(br); - return data; - } - } - - public struct ObjectType - { - public int typeID; - public bool isStriped; - public short scriptTypeIndex; - - public bool needReadScriptHash; // dont save - - public Hash scriptSigHash; - public Hash typeHash; - - public void LoadFromStream(BinaryReader br) - { - typeID = br.ReadInt32(); - isStriped = br.ReadBoolean(); - scriptTypeIndex = br.ReadInt16(); - - needReadScriptHash = typeID == -1 || typeID == 0x72; - if(needReadScriptHash) - scriptSigHash.LoadFromStream(br); - - typeHash.LoadFromStream(br); - - // GlobalManagers does not has TypeTrees - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(typeID); - bw.Write(isStriped); - bw.Write(scriptTypeIndex); - - if(needReadScriptHash) - scriptSigHash.SaveToStream(bw); - - typeHash.SaveToStream(bw); - return bw.BaseStream.Position - startPos; - } - - public int Size() - { - int ret = 0; - ret += sizeof(int); - ret += sizeof(bool); - ret += sizeof(short); - - if (needReadScriptHash) - ret += Hash.kSize; - - ret += Hash.kSize; - return ret; - } - } - - public struct ObjectInfo - { - public const int kSize = 12; - - public uint dataPos; - public uint size; - public uint typeID; - - public uint realPos; // dataPos + Header.dataOffset; // dont save - - public void LoadFromStream(BinaryReader br) - { - dataPos = br.ReadUInt32(); - size = br.ReadUInt32(); - typeID = br.ReadUInt32(); - } - - public long SaveToStream(BinaryWriter bw) - { - bw.Write(dataPos); - bw.Write(size); - bw.Write(typeID); - return kSize; - } - } - - public struct ScriptType - { - public int localFileIndex; - public long localIdentifierOfBin; - - public void LoadFromStream(BinaryReader br) - { - localFileIndex = br.ReadInt32(); - localIdentifierOfBin = br.AlignedReadInt64(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(localFileIndex); - bw.AlignedWriteInt64(localIdentifierOfBin); - return bw.BaseStream.Position - startPos; - } - } - - public struct ExternalInfo - { - public string dummy; - public Hash guid; - public int type; - public string name; - - public void LoadFromStream(BinaryReader br) - { - dummy = br.ReadRawString(); - guid.LoadFromStream(br); - type = br.ReadInt32(); - name = br.ReadRawString(); - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.WriteRawString(dummy); - guid.SaveToStream(bw); - bw.Write(type); - bw.WriteRawString(name); - return bw.BaseStream.Position - startPos; - } - } - - public struct ScriptsData - { - public ScriptID[] scriptIDs; - public List dllNames; - public List dllTypes; // 16 is user type - - public void LoadFromStream(BinaryReader br) - { - { - int count = br.ReadInt32(); - scriptIDs = new ScriptID[count]; - for(int i = 0; i < count; i++) - scriptIDs[i].LoadFromStream(br); - } - { - int count = br.ReadInt32(); - dllNames = new List(count); - for (var i = 0; i < count; i++) - dllNames.Add(br.ReadSizeString()); - } - { - int count = br.ReadInt32(); - dllTypes = new List(count); - for(var i = 0; i < count; i++) - dllTypes.Add(br.ReadInt32()); - } - } - - public long SaveToStream(BinaryWriter bw) - { - long startPos = bw.BaseStream.Position; - bw.Write(scriptIDs.Length); - for(int i = 0; i < scriptIDs.Length; i++) - scriptIDs[i].SaveToStream(bw); - - bw.Write(dllNames.Count); - for(int i = 0, imax = dllNames.Count; i < imax; i++) - bw.WriteSizeString(dllNames[i]); - - bw.Write(dllTypes.Count); - for(int i = 0, imax = dllTypes.Count; i < imax; i++) - bw.Write(dllTypes[i]); - - return bw.BaseStream.Position - startPos; - } - } - - public struct ScriptID - { - public int fileID; - public long pathID; // localIdentifier - - public void LoadFromStream(BinaryReader br) - { - fileID = br.ReadInt32(); - pathID = br.ReadInt64(); - } - - public long SaveToStream(BinaryWriter bw) - { - bw.Write(fileID); - bw.Write(pathID); - return 4 + 8; - } - } - - public struct Hash - { - public const int kSize = 16; - - public int[] data; - - public void LoadFromStream(BinaryReader br) - { - data = new int[4]; - for(int i = 0; i < data.Length; i++) - { - data[i] = br.ReadInt32(); - } - } - - public long SaveToStream(BinaryWriter bw) - { - for(int i = 0; i < data.Length; i++) - { - bw.Write(data[i]); - } - return kSize; - } - } -} diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs.meta deleted file mode 100644 index d9192c74..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinFileDefines.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 96788c7fe08d5d54d95a87cfbdcb643a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs deleted file mode 100644 index 08901404..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.IO; -using UnityEngine; -using System.Text; - -namespace HybridCLR.Editor.GlobalManagers -{ - public static class UnityBinUtils - { - public static void SwapUInt(ref uint val) - { - val = (val >> 24) | ((val >> 8) & 0x0000ff00) | ((val << 8) & 0x00ff0000) | (val << 24); - } - - public static string ReadRawString(this BinaryReader br) - { - long startPos = br.BaseStream.Position; - while (true) - { - byte val = br.ReadByte(); - if(val == 0) - break; - } - int size = (int)(br.BaseStream.Position - startPos); - br.BaseStream.Position = startPos; - - byte[] buffer = br.ReadBytes(size); - string ret = Encoding.UTF8.GetString(buffer, 0, size - 1); - - return ret; - } - - public static void WriteRawString(this BinaryWriter bw, string str) - { - byte[] buffer = Encoding.UTF8.GetBytes(str); - bw.Write(buffer, 0, buffer.Length); - bw.Write((byte)0); - } - - public static string ReadSizeString(this BinaryReader br) - { - int size = br.ReadInt32(); - byte[] buff = br.ReadBytes(size); - br.BaseStream.AlignOffset4(); - - string ret = Encoding.UTF8.GetString(buff); - return ret; - } - - public static void WriteSizeString(this BinaryWriter bw, string str) - { - byte[] buff = Encoding.UTF8.GetBytes(str); - bw.Write(buff.Length); - bw.Write(buff, 0, buff.Length); - bw.BaseStream.AlignOffset4(); - } - - public static void AlignOffset4(this Stream stream) - { - int offset = (((int)stream.Position + 3) >> 2) << 2; - stream.Position = offset; - } - - public static long AlignedReadInt64(this BinaryReader br) - { - br.BaseStream.AlignOffset4(); - return br.ReadInt64(); - } - - public static void AlignedWriteInt64(this BinaryWriter bw, long val) - { - bw.BaseStream.AlignOffset4(); - bw.Write(val); - } - } -} - diff --git a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs.meta b/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs.meta deleted file mode 100644 index e0f9bf96..00000000 --- a/Assets/TEngine/Scripts/Editor/HybridCLR/BuildProcessors/UnityBinFileReader/UnityBinUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf7c4cf970660614fb54d838ec6e7eda -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: