TSGameCfgGenerater.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Text;
  2. namespace etoy
  3. {
  4. class TSGameCfgGenerater : IGenerater
  5. {
  6. // 表导入
  7. private const string TableTypeImportArea = "<#TableTypeImportArea>";
  8. // 表数组定义
  9. private const string TableRepoProxyDefineArea = "<#TableRepoProxyDefineArea>";
  10. // 表数组赋值
  11. private const string TableRepoProxyAssignArea = "<#TableRepoProxyAssignArea>";
  12. private const string CLASS_FILE_NAME = "GameCfg.ts";
  13. private string CodeTemplatePath => Path.Combine(Environment.CurrentDirectory, "Configs/TSTemplates", CLASS_FILE_NAME);
  14. public void Generate(Context context)
  15. {
  16. var tables = context.Blackboard.Tables;
  17. var sbTableImports = new StringBuilder();
  18. var sbTableRepoProxyDefines = new StringBuilder();
  19. var sbTableRepoProxyAssigns = new StringBuilder();
  20. var tableIdx = 0;
  21. foreach (var table in tables)
  22. {
  23. if (table.TableTag.HasFlag(TableTag.Server))
  24. {
  25. var tableName = table.Name;
  26. // 主键
  27. var pkFieldInfo = table.GetPKFieldInfo();
  28. sbTableImports.Append($", xls{tableName}");
  29. tableIdx++;
  30. if (tableIdx % 10 == 0)
  31. { // 10个换一行
  32. sbTableImports.Append('\n');
  33. }
  34. sbTableRepoProxyDefines.AppendLine($"static {tableName}: ConfProxy<xls{tableName}>");
  35. sbTableRepoProxyAssigns.AppendLine($" Gamecfg.{tableName} = new ConfProxy(\"{tableName}\",xls.xls{tableName} ,\"{pkFieldInfo.FieldName}\")");
  36. }
  37. }
  38. var gameCfgText = File.ReadAllText(CodeTemplatePath);
  39. gameCfgText = gameCfgText.Replace(TableTypeImportArea, sbTableImports.ToString());
  40. gameCfgText = gameCfgText.Replace(TableRepoProxyDefineArea, sbTableRepoProxyDefines.ToString());
  41. gameCfgText = gameCfgText.Replace(TableRepoProxyAssignArea, sbTableRepoProxyAssigns.ToString());
  42. var gameCfgPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME);
  43. File.WriteAllText(gameCfgPath, gameCfgText, Encoding.UTF8);
  44. }
  45. }
  46. }