コード例 #1
0
        public void Load_Local(string rLocalAssetPath)
        {
            string rSkillListPath   = rLocalAssetPath + "/SkillList.txt";
            string rSkillListConfig = File.ReadAllText(rSkillListPath);

            this.ActorSkills = new Dict <int, List <GPCSymbolObject> >();

            JsonNode rJsonArray = JsonParser.Parse(rSkillListConfig);

            for (int i = 0; i < rJsonArray.Count; i++)
            {
                int nSkillID = int.Parse(rJsonArray[i].Value);

                string rSkillPath   = rLocalAssetPath + "/" + nSkillID + ".txt";
                string rSkillConfig = File.ReadAllText(rSkillPath);

                var rParser     = new GamePlayComponentParser(rSkillConfig);
                var rSymbolObjs = rParser.Parser();

                this.ActorSkills.Add(nSkillID, rSymbolObjs);
            }

            string rBinaryPath = UtilTool.PathCombine(rLocalAssetPath.Replace("Text", "Binary"), "SkillConfig.bytes");

            using (var fs = new FileStream(rBinaryPath, FileMode.Create, FileAccess.ReadWrite))
            {
                using (var br = new BinaryWriter(fs))
                {
                    //this.Serialize(br);
                }
            }
        }
コード例 #2
0
        public static void SaveHistory(this ABVersion rVersion, string rOutPath)
        {
            if (rVersion == null)
            {
                return;
            }

            string rHistoryDateStr = string.Format("History/{0}", DateTime.Now.ToString("yyyyMMdd_HHmmss"));
            string rVersionBinPath = UtilTool.PathCombine(rOutPath, rHistoryDateStr, ABVersion.ABVersion_File_Bin);

            string rDirPath = Path.GetDirectoryName(rVersionBinPath);

            if (!Directory.Exists(rDirPath))
            {
                Directory.CreateDirectory(rDirPath);
            }

            using (FileStream fs = new FileStream(rVersionBinPath, FileMode.Create))
            {
                using (BinaryWriter bw = new BinaryWriter(fs))
                {
                    rVersion.Serialize(bw);
                }
            }
            AssetDatabase.Refresh();
            AssetDatabase.SaveAssets();
        }
コード例 #3
0
        public void Analysis(string rGeneratePathRoot, string rDLLModuleName, System.Action <string, float> rProgressAction = null)
        {
            string rGeneratePath         = rGeneratePathRoot;
            string rCommonSerializerPath = rGeneratePath + "CommonSerializer.cs";

            mClassSerializers = new List <CodeGenerator_ClassSerializer>();

            mCommonSerializer = new CodeGenerator_CommonSerializer(rCommonSerializerPath);
            mCommonSerializer.WriteHead();

            var rSBTypes = SerializerBinaryTypes.Types;

            for (int i = 0; i < rSBTypes.Count; i++)
            {
                if (!rSBTypes[i].Assembly.GetName().Name.Equals(rDLLModuleName))
                {
                    continue;
                }

                var rGroupName  = string.Empty;
                var rAttributes = rSBTypes[i].GetCustomAttributes <SBGroupAttribute>(true);
                if (rAttributes.Length > 0)
                {
                    rGroupName = rAttributes[0].GroupName;
                }
                var rClassSerializer = new CodeGenerator_ClassSerializer(UtilTool.PathCombine(rGeneratePath, rGroupName, rSBTypes[i].FullName + ".Binary.cs"));
                rClassSerializer.WriteHead();
                rClassSerializer.WriteClass(rSBTypes[i]);
                rClassSerializer.WriteEnd();

                mClassSerializers.Add(rClassSerializer);

                var rSerializeMemberInfo = SerializerAssists.FindSerializeMembers(rSBTypes[i]);
                foreach (var rMemberInfo in rSerializeMemberInfo)
                {
                    var bDynamic = rMemberInfo.IsDefined(typeof(SBDynamicAttribute), false);
                    if (rMemberInfo.MemberType == MemberTypes.Field)
                    {
                        mCommonSerializer.AnalyzeGenerateCommon((rMemberInfo as FieldInfo).FieldType, bDynamic);
                    }
                    else if (rMemberInfo.MemberType == MemberTypes.Property)
                    {
                        mCommonSerializer.AnalyzeGenerateCommon((rMemberInfo as PropertyInfo).PropertyType, bDynamic);
                    }
                }
                UtilTool.SafeExecute(rProgressAction, $"Generate File: {rSBTypes[i].FullName}", (float)i / (float)rSBTypes.Count);
                rClassSerializer.Save();
            }
            mCommonSerializer.WriteEnd();
            mCommonSerializer.Save();
        }
コード例 #4
0
        public void LoadLocal(string rLocalAssetPath)
        {
            var rMemberInfos = this.GetType().GetMembers();

            foreach (var rMemberInfo in rMemberInfos)
            {
                if ((rMemberInfo.MemberType != MemberTypes.Field && rMemberInfo.MemberType != MemberTypes.Property))
                {
                    continue;
                }

                if (!rMemberInfo.IsApplyAttr(typeof(ConfigPathAttribute), false))
                {
                    continue;
                }

                var rConfigPathAttr = rMemberInfo.GetCustomAttribute <ConfigPathAttribute>(false);
                if (rConfigPathAttr == null)
                {
                    continue;
                }

                string   rAssetPath = UtilTool.PathCombine(rLocalAssetPath, rConfigPathAttr.AssetName);
                string   rJsonText  = File.ReadAllText(rAssetPath);
                JsonNode rJsonNode  = JsonParser.Parse(rJsonText);

                if (rMemberInfo.MemberType == MemberTypes.Field)
                {
                    FieldInfo rFieldInfo = rMemberInfo.DeclaringType.GetField(rMemberInfo.Name);
                    object    rValue     = rJsonNode.ToObject(rFieldInfo.FieldType);
                    rFieldInfo.SetValue(this, rValue);
                }
                else if (rMemberInfo.MemberType == MemberTypes.Property)
                {
                    PropertyInfo rPropInfo = rMemberInfo.DeclaringType.GetProperty(rMemberInfo.Name);
                    object       rValue    = rJsonNode.ToObject(rPropInfo.PropertyType);
                    rPropInfo.SetValue(this, rValue, null);
                }
            }
            string rBinaryPath = UtilTool.PathCombine(rLocalAssetPath.Replace("Text", "Binary"), "GameConfig.bytes");

            using (var fs = new FileStream(rBinaryPath, FileMode.Create, FileAccess.ReadWrite))
            {
                using (var br = new BinaryWriter(fs))
                {
                    this.Serialize(br);
                }
            }
        }
コード例 #5
0
        public static void SaveIncrement(this ABVersion rVersion, string rABPath, string rTargetPath)
        {
            if (rVersion == null)
            {
                return;
            }

            // 保存增量版本文件
            string rTargetVersionBinPath = UtilTool.PathCombine(rTargetPath, ABVersion.ABVersion_File_Bin);

            using (FileStream fs = new FileStream(rTargetVersionBinPath, FileMode.Create))
            {
                using (BinaryWriter bw = new BinaryWriter(fs))
                {
                    rVersion.Serialize(bw);
                }
            }

            // 复制增量AB包
            foreach (var rVersionPair in rVersion.Entries)
            {
                var rAVEntry = rVersionPair.Value;

                string rSrcABPath  = UtilTool.PathCombine(rABPath, rAVEntry.Name);
                string rDistABPath = UtilTool.PathCombine(rTargetPath, rAVEntry.Name);

                string rDistDir = Path.GetDirectoryName(rDistABPath);
                if (!Directory.Exists(rDistDir))
                {
                    Directory.CreateDirectory(rDistDir);
                }

                File.Copy(rSrcABPath, rDistABPath, true);
            }

            // 复制MD5文件
            string rSrcMD5Path  = UtilTool.PathCombine(rABPath, ABVersion.ABVersion_File_MD5);
            string rDistMD5Path = UtilTool.PathCombine(rTargetPath, ABVersion.ABVersion_File_MD5);

            string rDistMD5Dir = Path.GetDirectoryName(rDistMD5Path);

            if (!Directory.Exists(rDistMD5Dir))
            {
                Directory.CreateDirectory(rDistMD5Dir);
            }

            File.Copy(rSrcMD5Path, rDistMD5Path, true);
        }
コード例 #6
0
        public void Analysis(System.Action <string, float> rProgressAction = null)
        {
            mClassSerializers = new List <HotfixCodeGenerator_ClassSerializer>();

            mCommonSerializer = new HotfixCodeGenerator_CommonSerializer(mCommonSerializerPath);
            mCommonSerializer.WriteHead();

            var rSBTypes = HotfixSerializerBinaryTypes.Types;

            for (int i = 0; i < rSBTypes.Count; i++)
            {
                var rGroupName  = string.Empty;
                var rAttributes = new List <HotfixSBGroupAttribute>();
                rAttributes.AddRange(rSBTypes[i].GetCustomAttributes <HotfixSBGroupAttribute>(true));
                if (rAttributes.Count > 0)
                {
                    rGroupName = rAttributes[0].GroupName;
                }
                var rClassSerializer = new HotfixCodeGenerator_ClassSerializer(UtilTool.PathCombine(mGeneratePath, rGroupName, rSBTypes[i].FullName + ".Binary.cs"));
                rClassSerializer.WriteHead();
                rClassSerializer.WriteClass(rSBTypes[i]);
                rClassSerializer.WriteEnd();

                mClassSerializers.Add(rClassSerializer);

                var rSerializeMemberInfo = HotfixSerializerAssists.FindSerializeMembers(rSBTypes[i]);
                foreach (var rMemberInfo in rSerializeMemberInfo)
                {
                    var bDynamic = rMemberInfo.IsDefined(typeof(HotfixSBDynamicAttribute), false);
                    if (rMemberInfo.MemberType == MemberTypes.Field)
                    {
                        mCommonSerializer.AnalyzeGenerateCommon((rMemberInfo as FieldInfo).FieldType, bDynamic);
                    }
                    else if (rMemberInfo.MemberType == MemberTypes.Property)
                    {
                        mCommonSerializer.AnalyzeGenerateCommon((rMemberInfo as PropertyInfo).PropertyType, bDynamic);
                    }
                }
                UtilTool.SafeExecute(rProgressAction, $"Generate File: {rSBTypes[i].FullName}", (float)i / (float)rSBTypes.Count);
                rClassSerializer.Save();
            }
            mCommonSerializer.WriteEnd();
            mCommonSerializer.Save();

            this.GenCsproj();
        }
コード例 #7
0
        public void Initialize(string rOutPath)
        {
            mEntries = new Dict <string, Entry>();

            string        rHistoryPath    = UtilTool.PathCombine(rOutPath, "History");
            DirectoryInfo rHistoryDirInfo = new DirectoryInfo(rHistoryPath);

            if (!rHistoryDirInfo.Exists)
            {
                return;
            }

            ABVersion rCurVersion = ABVersionEditor.Load(rOutPath);

            var rSubDirs = rHistoryDirInfo.GetDirectories();

            for (int i = 0; i < rSubDirs.Length; i++)
            {
                Entry rEntry = new Entry();
                rEntry.Path           = UtilTool.PathCombine(rHistoryPath, rSubDirs[i].Name, ABVersion.ABVersion_File_Bin);
                rEntry.Time           = rSubDirs[i].Name;
                rEntry.IncVer         = new ABVersion();
                rEntry.IncVer.Entries = new Dict <string, ABVersionEntry>();

                ABVersion rHistoryVersion = ABVersionEditor.Load(rSubDirs[i].FullName);

                // 比较两个版本
                foreach (var rPair in rCurVersion.Entries)
                {
                    var rAVEntry  = rPair.Value;
                    var rOldEntry = rHistoryVersion.GetEntry(rAVEntry.Name);
                    if (rOldEntry == null)  // 说明是新增的
                    {
                        rEntry.IncVer.Entries.Add(rAVEntry.Name, rAVEntry);
                    }
                    else
                    {
                        if (rOldEntry.Version != rAVEntry.Version)  // 版本不一致
                        {
                            rEntry.IncVer.Entries.Add(rAVEntry.Name, rAVEntry);
                        }
                    }
                }
                mEntries.Add(rEntry.Time, rEntry);
            }
        }
コード例 #8
0
        public override void CSGenerateProcess(CSGenerate rGenerate)
        {
            StartGenerateCommon();
            foreach (var rType in SerializerBinaryTypes.Types)
            {
                var rText = new StringBuilder();

                rText
                .A("using System.IO;").N()
                .A("using Core;").N()
                .A("using Core.Serializer;").N()
                .A("using Game.Serializer;").N()
                .L(2)
                .A("/// <summary>").N()
                .A("/// 文件自动生成无需又该!如果出现编译错误,删除文件后会自动生成").N()
                .A("/// </summary>").N();
                if (!string.IsNullOrEmpty(rType.Namespace))
                {
                    rText
                    .F("namespace {0}", rType.Namespace).N()
                    .A("{").N();
                }
                rText
                .F("public partial class {0}", rType.Name).N()
                .A("{").N();

                var rSerializeMemberInfo = SearchSerializeMember(rType);

                // Serialize Function
                rText
                .T(1).A("public override void Serialize(BinaryWriter rWriter)").N()
                .T(1).A("{").N()
                .T(2).A("base.Serialize(rWriter);").N();
                foreach (var rMemberInfo in rSerializeMemberInfo)
                {
                    var rParamText = GenerateClassMemberDummyText(rMemberInfo);
                    if (rMemberInfo.IsDefined(typeof(SBDynamicAttribute), true) && !IsBaseType(GetMemberType(rMemberInfo), false))
                    {
                        rText.T(2).F("rWriter.SerializeDynamic({0});", rParamText).N();
                    }
                    else
                    {
                        rText.T(2).F("rWriter.Serialize({0});", rParamText).N();
                    }
                }

                rText
                .T(1).A("}").N();

                // Deserialize Function
                rText
                .T(1).A("public override void Deserialize(BinaryReader rReader)").N()
                .T(1).A("{").N()
                .T(2).A("base.Deserialize(rReader);").N();
                foreach (var rMemberInfo in rSerializeMemberInfo)
                {
                    if (rMemberInfo.IsDefined(typeof(SBDynamicAttribute), false) && !IsBaseType(GetMemberType(rMemberInfo), false))
                    {
                        rText.T(2).F("this.{0} = {1}rReader.DeserializeDynamic({2});", rMemberInfo.Name,
                                     GenerateClassMemberTypeText(rMemberInfo),
                                     GenerateClassMemberDummyText(rMemberInfo)).N();
                    }
                    else
                    {
                        rText.T(2).F("this.{0} = {1}rReader.Deserialize({2});", rMemberInfo.Name,
                                     GenerateClassMemberTypeText(rMemberInfo),
                                     GenerateClassMemberDummyText(rMemberInfo)).N();
                    }
                }

                rText
                .T(1).A("}").N();

                rText.A("}").N();
                if (!string.IsNullOrEmpty(rType.Namespace))
                {
                    rText.A("}").N();
                }

                var rGroupName  = string.Empty;
                var rAttributes = rType.GetCustomAttributes <SBGroupAttribute>(true);
                if (rAttributes.Length > 0)
                {
                    rGroupName = rAttributes[0].GroupName;
                }

                rGenerate.Add(rText.ToString(), UtilTool.PathCombine(GeneratePath, rGroupName, rType.FullName + ".Binary.cs"));

                foreach (var rMemberInfo in rSerializeMemberInfo)
                {
                    var bDynamic = rMemberInfo.IsDefined(typeof(SBDynamicAttribute), false);
                    if (rMemberInfo.MemberType == MemberTypes.Field)
                    {
                        AnalyzeGenerateCommon((rMemberInfo as FieldInfo).FieldType, bDynamic);
                    }
                    else if (rMemberInfo.MemberType == MemberTypes.Property)
                    {
                        AnalyzeGenerateCommon((rMemberInfo as PropertyInfo).PropertyType, bDynamic);
                    }
                }
            }
            EndGenerateCommon();

            rGenerate.AddHead(mCommonSerializer.ToString(), CommonSerializerPath);
        }
コード例 #9
0
        /// <summary>
        /// 得到Persistent空间下的Url路径
        /// </summary>
        public string GetPersistentUrl(Platform rPlatform)
        {
            int rPlatformIndex = (int)rPlatform;

            return(PlatformPrefixs[rPlatformIndex] + UtilTool.PathCombine(Application.persistentDataPath, PlatformNames[rPlatformIndex] + "_Assetbundles") + "/");
        }
コード例 #10
0
ファイル: ExcelReader.cs プロジェクト: hgpdai/knight
        /// <summary>
        /// 导出Excel
        /// </summary>
        public void Export(ExcelFormat rExcelFormat)
        {
            string rConfigFile = UtilTool.PathCombine(this.ExcelConfigRootPath, "Excel", rExcelFormat.ExcelName);
            string rExportDir  = UtilTool.PathCombine(this.ExcelConfigRootPath, "Text");

            FileStream       rStream      = File.Open(rConfigFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            IExcelDataReader rExcelReader = ExcelReaderFactory.CreateOpenXmlReader(rStream);
            DataSet          rResult      = rExcelReader.AsDataSet();
            DataTable        rDataTable   = rResult.Tables[rExcelFormat.SheetName];

            if (rDataTable == null)
            {
                Debug.LogErrorFormat("Excel {0} has not sheet {1}.", rExcelFormat.ExcelName, rExcelFormat.SheetName);
                rExcelReader.Close();
                rStream.Close();
                return;
            }
            int rColumns = rDataTable.Columns.Count;
            int rRows    = rDataTable.Rows.Count;

            if (rRows == 0)
            {
                Debug.LogErrorFormat("Excel {0} has empty rows.", rExcelFormat.ExcelName);
                rExcelReader.Close();
                rStream.Close();
                return;
            }

            Type rDataType = MainAssemblyExpand.GetType(rExcelFormat.ClassName);

            if (rDataType == null)
            {
                Debug.LogErrorFormat("Excel {0} can not find Class {1}, please check it.", rExcelFormat.ExcelName, rExcelFormat.ClassName);
                rExcelReader.Close();
                rStream.Close();
                return;
            }

            var rTitleRow = rDataTable.Rows[0];
            var rFields   = new Dict <string, FieldInfo>();
            var rKeyIDs   = new Dict <string, int>();

            for (int i = 0; i < rColumns; i++)
            {
                FieldInfo rFileInfo = rDataType.GetField(rTitleRow[i].ToString());
                rFields.Add(rTitleRow[i].ToString(), rFileInfo);
                rKeyIDs.Add(rTitleRow[i].ToString(), i);
            }

            JsonNode rDataJson = new JsonClass();

            for (int i = 1; i < rRows; i++)
            {
                JsonNode rItemJson = new JsonClass();
                foreach (var rPair in rFields)
                {
                    string     rFieldValue = rDataTable.Rows[i][rKeyIDs[rPair.Key]].ToString();
                    JsonParser rJsonParser = new JsonParser(rFieldValue);
                    JsonNode   rTempNode   = null;
                    try {
                        rTempNode = rJsonParser.Parser();
                    }
                    catch (Exception) {
                        rJsonParser.isValid = false;
                    }
                    if (!rJsonParser.isValid)
                    {
                        rTempNode = new JsonData(rFieldValue);
                    }

                    rItemJson.Add(rPair.Key, rTempNode);
                }
                rDataJson.Add(rDataTable.Rows[i][rKeyIDs[rExcelFormat.PrimaryKey]].ToString(), rItemJson);
            }
            File.WriteAllText(UtilTool.PathCombine(rExportDir, rExcelFormat.SheetName + ".json"), rDataJson.ToString());
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            rExcelReader.Close();
            rStream.Close();
        }