Selaa lähdekoodia

通过packages-lock.json文件获取ET包的信息

tanghai 1 vuosi sitten
vanhempi
commit
77a526e19b

+ 20 - 57
Share/Tool/ExcelExporter/ExcelExporter.cs

@@ -56,17 +56,15 @@ namespace ET
     {
         private static string template;
 
-        private const string ClientClassDir = "../Unity/Assets/Excel/Model/Client/";
+        private static string ClientClassDir;
         // 服务端因为机器人的存在必须包含客户端所有配置,所以单独的c字段没有意义,单独的c就表示cs
-        private const string ServerClassDir = "../Unity/Assets/Excel/Model/Server/";
+        private static string ServerClassDir;
+        private static string CSClassDir;
 
-        private const string CSClassDir = "../Unity/Assets/Excel/Model/ClientServer/";
-
-        private const string jsonDir = "../Config/Json/{0}/{1}/";
+        private const string jsonDir = "../Config/Json";
 
         private const string clientProtoDir = "../Unity/Assets/Bundles/Config";
-        private const string serverProtoDir = "../Config/Excel/{0}/{1}";
-        private const string replaceStr = "/{0}/{1}";
+        private const string serverProtoDir = "../Config/Excel";
         private static Assembly[] configAssemblies = new Assembly[3];
 
         private static Dictionary<string, Table> tables = new Dictionary<string, Table>();
@@ -104,65 +102,30 @@ namespace ET
                 template = File.ReadAllText("Template.txt");
                 ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
                 
-                if (Directory.Exists("../Unity/Assets/Excel"))
-                {
-                    Directory.Delete("../Unity/Assets/Excel", true);
-                }
-                
-                File.WriteAllText("../Unity/Assets/Excel/Model/AssemblyReference.asmref", "[\"reference\": \"ET.Model\"]");
-
-                if (!Directory.Exists(ClientClassDir))
-                {
-                    Directory.CreateDirectory(ClientClassDir);
-                }
-
-                if (!Directory.Exists(ServerClassDir))
-                {
-                    Directory.CreateDirectory(ServerClassDir);
-                }
-
-                if (!Directory.Exists(CSClassDir))
-                {
-                    Directory.CreateDirectory(CSClassDir);
-                }
-
-                string jsonProtoDirParent = jsonDir.Replace(replaceStr, string.Empty);
-                if (Directory.Exists(jsonProtoDirParent))
+                PackagesLock packagesLock = PackageHelper.LoadEtPackagesLock("../Unity");
+                PackageInfo excelPackage = packagesLock.dependencies["com.et.excel"];
+                ClientClassDir = Path.Combine(excelPackage.dir, "CodeMode/Model/Client");
+                ServerClassDir = Path.Combine(excelPackage.dir, "CodeMode/Model/Server");
+                CSClassDir = Path.Combine(excelPackage.dir, "CodeMode/Model/ClientServer");
+            
+                if (Directory.Exists(jsonDir))
                 {
-                    Directory.Delete(jsonProtoDirParent, true);
+                    Directory.Delete(jsonDir, true);
                 }
 
-                string serverProtoDirParent = serverProtoDir.Replace(replaceStr, string.Empty);
-                if (Directory.Exists(serverProtoDirParent))
+                if (Directory.Exists(serverProtoDir))
                 {
-                    Directory.Delete(serverProtoDirParent, true);
+                    Directory.Delete(serverProtoDir, true);
                 }
                 
                 List<string> list = new();
-                foreach (string directory in Directory.GetDirectories("../Unity/Packages", "com.et.*"))
-                {
-                    string p = Path.Combine(directory, "Excel");
-                    if (!Directory.Exists(p))
-                    {
-                        continue;
-                    }
-                    
-                    string baseName = Path.GetFileName(directory);
-                    string moduleName = baseName.Replace("com.et.", "");
-                    list.Add(p);
-                }
-                
-                foreach (string directory in Directory.GetDirectories("../Unity/Library/PackageCache", "com.et.*"))
+                foreach ((string key, PackageInfo packageInfo) in packagesLock.dependencies)
                 {
-                    string p = Path.Combine(directory, "Excel");
+                    string p = Path.Combine(packageInfo.dir, "Excel");
                     if (!Directory.Exists(p))
                     {
                         continue;
                     }
-                    
-                    string baseName = Path.GetFileName(directory);
-                    string moduleName = baseName.Replace("com.et.", "");
-                    moduleName = StringHelper.CapitalizeFirstLetter(moduleName);
                     list.Add(p);
                 }
 
@@ -323,7 +286,7 @@ namespace ET
 
         private static string GetProtoDir(ConfigType configType, string relativeDir)
         {
-            return string.Format(serverProtoDir, configType.ToString(), relativeDir);
+            return Path.Combine(serverProtoDir, configType.ToString(), relativeDir);
         }
 
         private static Assembly GetAssembly(ConfigType configType)
@@ -528,7 +491,7 @@ namespace ET
 
             sb.Append("]}\n");
 
-            string dir = string.Format(jsonDir, configType.ToString(), relativeDir);
+            string dir = Path.Combine(jsonDir, configType.ToString(), relativeDir);
             if (!Directory.Exists(dir))
             {
                 Directory.CreateDirectory(dir);
@@ -653,7 +616,7 @@ namespace ET
 
             IMerge final = Activator.CreateInstance(type) as IMerge;
 
-            string p = Path.Combine(string.Format(jsonDir, configType, relativeDir));
+            string p = Path.Combine(jsonDir, configType.ToString(), relativeDir);
             string[] ss = Directory.GetFiles(p, $"{table.Name}*.txt");
             List<string> jsonPaths = ss.ToList();
 

+ 14 - 41
Share/Tool/Proto2CS/Proto2CS.cs

@@ -22,9 +22,9 @@ namespace ET
 
     public static partial class InnerProto2CS
     {
-        private const string clientMessagePath = "../Unity/Assets/Proto/Model/Client/";
-        private const string serverMessagePath = "../Unity/Assets/Proto/Model/Server/";
-        private const string clientServerMessagePath = "../Unity/Assets/Proto/Model/ClientServer/";
+        private static string clientMessagePath;
+        private static string serverMessagePath;
+        private static string clientServerMessagePath;
         private static readonly char[] splitChars = [' ', '\t'];
         private static readonly List<OpcodeInfo> msgOpcode = [];
 
@@ -32,55 +32,28 @@ namespace ET
         {
             msgOpcode.Clear();
 
-            if (Directory.Exists("../Unity/Assets/Proto"))
-            {
-                Directory.Delete("../Unity/Assets/Proto", true);
-            }
-
-            Directory.CreateDirectory("../Unity/Assets/Proto/Model");
+            PackagesLock packagesLock = PackageHelper.LoadEtPackagesLock("../Unity");
+            PackageInfo protoPackage = packagesLock.dependencies["com.et.proto"];
+            clientMessagePath = Path.Combine(protoPackage.dir, "CodeMode/Model/Client");
+            serverMessagePath = Path.Combine(protoPackage.dir, "CodeMode/Model/Server");
+            clientServerMessagePath = Path.Combine(protoPackage.dir, "CodeMode/Model/ClientServer");
             
-            File.WriteAllText("../Unity/Assets/Proto/Model/AssemblyReference.asmref", "[\"reference\": \"ET.Model\"]");
-
-            System.Collections.Generic.List<(string, string)> list = new ();
-            foreach (string directory in Directory.GetDirectories("../Unity/Packages", "com.et.*"))
-            {
-                string p = Path.Combine(directory, "Proto");
-                if (!Directory.Exists(p))
-                {
-                    continue;
-                }
-                
-                string baseName = Path.GetFileName(directory);
-                string moduleName = baseName.Replace("com.et.", "");
-                moduleName = StringHelper.CapitalizeFirstLetter(moduleName);
-                
-                list.Add((p, moduleName));
-            }
-            foreach (string directory in Directory.GetDirectories("../Unity/Library/PackageCache", "com.et.*"))
+            List<(string, string)> list = new ();
+            foreach ((string key, PackageInfo packageInfo) in packagesLock.dependencies)
             {
-                string p = Path.Combine(directory, "Proto");
+                string p = Path.Combine(packageInfo.dir, "Proto");
                 if (!Directory.Exists(p))
                 {
                     continue;
                 }
                 
-                string baseName = Path.GetFileName(directory);
-                string moduleName = baseName.Replace("com.et.", "");
-                moduleName = StringHelper.CapitalizeFirstLetter(moduleName);
-                
-                list.Add((p, moduleName));
-            }
-
-            System.Collections.Generic.List<(string, string)> protoList = new ();
-            foreach ((string s, string module) in list)
-            {
-                foreach (var f in FileHelper.GetAllFiles(s, "*.proto"))
+                foreach (var f in FileHelper.GetAllFiles(p, "*.proto"))
                 {
-                    protoList.Add((f, module));
+                    list.Add((f, packageInfo.module));
                 }
             }
             
-            foreach ((string s, string module) in protoList)
+            foreach ((string s, string module) in list)
             {
                 if (!s.EndsWith(".proto"))
                 {

+ 0 - 7
Unity/Assets/Bundles/Config/UnitConfigCategory.bytes.meta

@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 4c54687c04c629d488376e5ef067ef18
-TextScriptImporter:
-  externalObjects: {}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 2 - 2
Unity/Packages/com.et.core/DotNet~/ET.Core.csproj

@@ -15,7 +15,7 @@
 
     <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
       <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-      <DefineConstants>DOTNET;UNITY_DOTSPLAYER</DefineConstants>
+      <DefineConstants>DOTNET</DefineConstants>
       <OutputPath>./obj</OutputPath>
       <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
       <Optimize>false</Optimize>
@@ -24,7 +24,7 @@
 
     <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">  
       <AllowUnsafeBlocks>true</AllowUnsafeBlocks> 
-      <DefineConstants>DOTNET;UNITY_DOTSPLAYER</DefineConstants>
+      <DefineConstants>DOTNET</DefineConstants>
       <OutputPath>./obj</OutputPath>
       <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
       <NoWarn>0169,0649,3021,8981,CS9193,CS9192,NU1903</NoWarn>

+ 85 - 0
Unity/Packages/com.et.core/Runtime/Helper/PackageHelper.cs

@@ -0,0 +1,85 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace ET
+{
+    public class PackagesLock
+    {
+        [BsonIgnore]
+        public string unityDir;
+        
+        public Dictionary<string, PackageInfo> dependencies = new();
+    }
+    
+    public class PackageInfo
+    {
+        [BsonIgnore]
+        public string name;
+        [BsonIgnore]
+        public string module;
+        
+        public string version;
+        public int depth;
+        public string source;
+        public string hash;
+        public string url;
+        public string dir;
+        public Dictionary<string, string> dependencies = new();
+    }
+    
+    public static class PackageHelper
+    {
+        public static PackagesLock LoadEtPackagesLock(string unityDir)
+        {
+            string s = File.ReadAllText(Path.Combine(unityDir, "Packages/packages-lock.json"));
+
+            PackagesLock packagesLock = MongoHelper.FromJson<PackagesLock>(s);
+            packagesLock.unityDir = unityDir;
+            
+            foreach (string k in packagesLock.dependencies.Keys.ToArray())
+            {
+                if (!k.StartsWith("com.et"))
+                {
+                    packagesLock.dependencies.Remove(k);
+                    continue;
+                }
+
+                PackageInfo packageInfo = packagesLock.dependencies[k];
+
+                packageInfo.name = k;
+                packageInfo.module = k.Replace("com.et.", "");
+                
+                if (packageInfo.source == "embedded")
+                {
+                    packageInfo.dir = Path.Combine(unityDir, "Packages", packageInfo.version.Replace("file:", ""));
+                }
+                else if (packageInfo.source == "git")
+                {
+                    string p1 = Path.Combine(unityDir, "Library/PackageCache", k + "@" + packageInfo.hash.Substring(0, 10));
+                    string p2 = Path.Combine(unityDir, "Packages", k + "@" + packageInfo.hash);
+                    if (Directory.Exists(p1))
+                    {
+                        packageInfo.dir = p1;
+                    }
+                    else if (Directory.Exists(p2))
+                    {
+                        packageInfo.dir = p2;
+                    }
+                    else
+                    {
+                        throw new Exception($"not found package: {p1} {p2}");
+                    }
+                }
+                else
+                {
+                    packageInfo.dir = Path.Combine(unityDir, "Library/PackageCache", k + "@" + packageInfo.version);
+                }
+            }
+            
+            return packagesLock;
+        }
+    }
+}

+ 3 - 0
Unity/Packages/com.et.core/Runtime/Helper/PackageHelper.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b4768f3fe59146979cdf5802ee06533d
+timeCreated: 1715783252

+ 2 - 2
Unity/Packages/com.et.recast/DotNet~/ET.Recast.csproj

@@ -14,7 +14,7 @@
     </PropertyGroup>
 
     <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
-        <DefineConstants>DOTNET;UNITY_DOTSPLAYER</DefineConstants>
+        <DefineConstants>DOTNET</DefineConstants>
         <OutputPath>./obj</OutputPath>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
@@ -23,7 +23,7 @@
     </PropertyGroup>
 
     <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
-        <DefineConstants>DOTNET;UNITY_DOTSPLAYER</DefineConstants>
+        <DefineConstants>DOTNET</DefineConstants>
         <OutputPath>./obj</OutputPath>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+ 1 - 1
Unity/Packages/packages-lock.json

@@ -5,7 +5,7 @@
       "depth": 0,
       "source": "git",
       "dependencies": {},
-      "hash": "51da1d4c433504f3171fff66217035b89c45d823"
+      "hash": "6d0ceaa4f5cac0b9269fd4b2c3a8e36f4de549a8"
     },
     "com.cysharp.memorypack": {
       "version": "https://github.com/Cysharp/MemoryPack.git?path=src/MemoryPack.Unity/Assets/Plugins/MemoryPack",