GenCode_CSharp.js 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.genCode = void 0;
  4. const csharp_1 = require("csharp");
  5. const CodeWriter_1 = require("./CodeWriter");
  6. function genCode(handler) {
  7. let settings = handler.project.GetSettings("Publish").codeGeneration;
  8. let codePkgName = handler.ToFilename(handler.pkg.name); //convert chinese to pinyin, remove special chars etc.
  9. let exportCodePath = handler.exportCodePath + '/' + codePkgName;
  10. let namespaceName = codePkgName;
  11. let isMonoGame = handler.project.type == csharp_1.FairyEditor.ProjectType.MonoGame;
  12. if (settings.packageName)
  13. namespaceName = settings.packageName + '.' + namespaceName;
  14. //CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
  15. let classes = handler.CollectClasses(settings.ignoreNoname, settings.ignoreNoname, null);
  16. handler.SetupCodeFolder(exportCodePath, "cs"); //check if target folder exists, and delete old files
  17. let getMemberByName = settings.getMemberByName;
  18. let classCnt = classes.Count;
  19. let writer = new CodeWriter_1.default();
  20. for (let i = 0; i < classCnt; i++) {
  21. let classInfo = classes.get_Item(i);
  22. let members = classInfo.members;
  23. writer.reset();
  24. writer.writeln('using FairyGUI;');
  25. writer.writeln('using FairyGUI.Utils;');
  26. writer.writeln();
  27. writer.writeln('namespace %s', namespaceName);
  28. writer.startBlock();
  29. writer.writeln('public partial class %s : %s', classInfo.className, classInfo.superClassName);
  30. writer.startBlock();
  31. let memberCnt = members.Count;
  32. for (let j = 0; j < memberCnt; j++) {
  33. let memberInfo = members.get_Item(j);
  34. writer.writeln('public %s %s;', memberInfo.type, memberInfo.varName);
  35. }
  36. writer.writeln('public const string URL = "ui://%s%s";', handler.pkg.id, classInfo.resId);
  37. writer.writeln();
  38. writer.writeln('public static %s CreateInstance()', classInfo.className);
  39. writer.startBlock();
  40. writer.writeln('return (%s)UIPackage.CreateObject("%s", "%s");', classInfo.className, handler.pkg.name, classInfo.resName);
  41. writer.endBlock();
  42. writer.writeln();
  43. if (isMonoGame) {
  44. writer.writeln("protected override void OnConstruct()");
  45. writer.startBlock();
  46. }
  47. else {
  48. writer.writeln('public override void ConstructFromXML(XML xml)');
  49. writer.startBlock();
  50. writer.writeln('base.ConstructFromXML(xml);');
  51. writer.writeln();
  52. }
  53. for (let j = 0; j < memberCnt; j++) {
  54. let memberInfo = members.get_Item(j);
  55. if (memberInfo.group == 0) {
  56. if (getMemberByName)
  57. writer.writeln('%s = (%s)GetChild("%s");', memberInfo.varName, memberInfo.type, memberInfo.name);
  58. else
  59. writer.writeln('%s = (%s)GetChildAt(%s);', memberInfo.varName, memberInfo.type, memberInfo.index);
  60. }
  61. else if (memberInfo.group == 1) {
  62. if (getMemberByName)
  63. writer.writeln('%s = GetController("%s");', memberInfo.varName, memberInfo.name);
  64. else
  65. writer.writeln('%s = GetControllerAt(%s);', memberInfo.varName, memberInfo.index);
  66. }
  67. else {
  68. if (getMemberByName)
  69. writer.writeln('%s = GetTransition("%s");', memberInfo.varName, memberInfo.name);
  70. else
  71. writer.writeln('%s = GetTransitionAt(%s);', memberInfo.varName, memberInfo.index);
  72. }
  73. }
  74. writer.endBlock();
  75. writer.endBlock(); //class
  76. writer.endBlock(); //namepsace
  77. writer.save(exportCodePath + '/' + classInfo.className + '.cs');
  78. }
  79. writer.reset();
  80. let binderName = codePkgName + 'Binder';
  81. writer.writeln('using FairyGUI;');
  82. writer.writeln();
  83. writer.writeln('namespace %s', namespaceName);
  84. writer.startBlock();
  85. writer.writeln('public class %s', binderName);
  86. writer.startBlock();
  87. writer.writeln('public static void BindAll()');
  88. writer.startBlock();
  89. for (let i = 0; i < classCnt; i++) {
  90. let classInfo = classes.get_Item(i);
  91. writer.writeln('UIObjectFactory.SetPackageItemExtension(%s.URL, typeof(%s));', classInfo.className, classInfo.className);
  92. }
  93. writer.endBlock(); //bindall
  94. writer.endBlock(); //class
  95. writer.endBlock(); //namespace
  96. writer.save(exportCodePath + '/' + binderName + '.cs');
  97. }
  98. exports.genCode = genCode;