using System.Text; namespace etoy { class TSGameCfgGenerater : IGenerater { // 表导入 private const string TableTypeImportArea = "<#TableTypeImportArea>"; // 表数组定义 private const string TableRepoProxyDefineArea = "<#TableRepoProxyDefineArea>"; // 表数组赋值 private const string TableRepoProxyAssignArea = "<#TableRepoProxyAssignArea>"; private const string CLASS_FILE_NAME = "GameCfg.ts"; private string CodeTemplatePath => Path.Combine(Environment.CurrentDirectory, "Configs/TSTemplates", CLASS_FILE_NAME); public void Generate(Context context) { var tables = context.Blackboard.Tables; var sbTableImports = new StringBuilder(); var sbTableRepoProxyDefines = new StringBuilder(); var sbTableRepoProxyAssigns = new StringBuilder(); var tableIdx = 0; foreach (var table in tables) { if (table.TableTag.HasFlag(TableTag.Server)) { var tableName = table.Name; // 主键 var pkFieldInfo = table.GetPKFieldInfo(); sbTableImports.Append($", xls{tableName}"); tableIdx++; if (tableIdx % 10 == 0) { // 10个换一行 sbTableImports.Append('\n'); } sbTableRepoProxyDefines.AppendLine($"static {tableName}: ConfProxy"); sbTableRepoProxyAssigns.AppendLine($" Gamecfg.{tableName} = new ConfProxy(\"{tableName}\",xls.xls{tableName} ,\"{pkFieldInfo.FieldName}\")"); } } var gameCfgText = File.ReadAllText(CodeTemplatePath); gameCfgText = gameCfgText.Replace(TableTypeImportArea, sbTableImports.ToString()); gameCfgText = gameCfgText.Replace(TableRepoProxyDefineArea, sbTableRepoProxyDefines.ToString()); gameCfgText = gameCfgText.Replace(TableRepoProxyAssignArea, sbTableRepoProxyAssigns.ToString()); var gameCfgPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME); File.WriteAllText(gameCfgPath, gameCfgText, Encoding.UTF8); } } }