GenCode_CSharp.ts 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import { FairyEditor } from 'csharp';
  2. import CodeWriter from './CodeWriter';
  3. function genCode(handler: FairyEditor.PublishHandler) {
  4. let settings = (<FairyEditor.GlobalPublishSettings>handler.project.GetSettings("Publish")).codeGeneration;
  5. let codePkgName = handler.ToFilename(handler.pkg.name); //convert chinese to pinyin, remove special chars etc.
  6. handler.exportCodePath = handler.exportCodePath.replace(/\\/g, "/") + '/' + codePkgName;
  7. let exportCodePath = handler.exportCodePath
  8. let namespaceName = codePkgName;
  9. let isMonoGame = handler.project.type == FairyEditor.ProjectType.MonoGame;
  10. if (settings.packageName)
  11. namespaceName = settings.packageName + '.' + namespaceName;
  12. //CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
  13. let classes = handler.CollectClasses(settings.ignoreNoname, settings.ignoreNoname, null);
  14. handler.SetupCodeFolder(exportCodePath, "cs"); //check if target folder exists, and delete old files
  15. let getMemberByName = settings.getMemberByName;
  16. let classCnt = classes.Count;
  17. let writer = new CodeWriter();
  18. for (let i: number = 0; i < classCnt; i++) {
  19. let classInfo = classes.get_Item(i);
  20. let members = classInfo.members;
  21. writer.reset();
  22. writer.writeln('using FairyGUI;');
  23. // writer.writeln('using FairyGUI.Utils;');
  24. writer.writeln();
  25. writer.writeln('namespace %s', namespaceName);
  26. writer.startBlock();
  27. writer.writeln('public partial class %s', classInfo.className);
  28. writer.startBlock();
  29. writer.writeln('public %s %s;', classInfo.superClassName, "target");
  30. let memberCnt = members.Count
  31. for (let j: number = 0; j < memberCnt; j++) {
  32. let memberInfo = members.get_Item(j);
  33. writer.writeln('public %s %s;', memberInfo.type, memberInfo.varName);
  34. }
  35. writer.writeln('public const string URL = "ui://%s%s";', handler.pkg.id, classInfo.resId);
  36. writer.writeln('public const string PACKAGE_NAME = "%s";', handler.pkg.name);
  37. writer.writeln('public const string RES_NAME = "%s";', classInfo.resName);
  38. writer.writeln('private static %s _proxy;', classInfo.className);
  39. writer.writeln();
  40. writer.writeln('public static %s Create(GObject gObject = null)', classInfo.className);
  41. writer.startBlock();
  42. writer.writeln("var ui = new %s();", classInfo.className);
  43. writer.writeln("if(gObject == null)");
  44. writer.writeln('\tui.target = (%s)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);', classInfo.superClassName);
  45. writer.writeln("else");
  46. writer.writeln('\tui.target = (%s)gObject;', classInfo.superClassName);
  47. writer.writeln("ui.Init(ui.target);");
  48. writer.writeln("return ui;");
  49. writer.endBlock();
  50. writer.writeln();
  51. writer.writeln('public static %s Proxy(GObject gObject = null)', classInfo.className);
  52. writer.startBlock();
  53. writer.writeln("if(_proxy == null)");
  54. writer.startBlock();
  55. writer.writeln("_proxy = new %s();", classInfo.className);
  56. writer.endBlock();
  57. writer.writeln("var ui = _proxy;");
  58. writer.writeln("if(gObject == null)");
  59. writer.writeln('\tui.target = (%s)UIPackage.CreateObject(PACKAGE_NAME, RES_NAME);', classInfo.superClassName);
  60. writer.writeln("else");
  61. writer.writeln('\tui.target = (%s)gObject;', classInfo.superClassName);
  62. writer.writeln("ui.Init(ui.target);");
  63. writer.writeln("return ui;");
  64. writer.endBlock();
  65. writer.writeln();
  66. writer.writeln('public static void ProxyEnd()');
  67. writer.startBlock();
  68. writer.writeln("if (_proxy != null)");
  69. writer.startBlock();
  70. writer.writeln("_proxy.Dispose();");
  71. writer.endBlock();
  72. writer.endBlock();
  73. writer.writeln();
  74. writer.writeln('public static void ClearProxy()');
  75. writer.startBlock();
  76. writer.writeln("ProxyEnd();");
  77. writer.writeln("_proxy = null;");
  78. writer.endBlock();
  79. writer.writeln();
  80. writer.writeln('private void Init(GComponent comp)');
  81. writer.startBlock();
  82. for (let j: number = 0; j < memberCnt; j++) {
  83. let memberInfo = members.get_Item(j);
  84. if (memberInfo.group == 0) {
  85. if (getMemberByName)
  86. {
  87. if(memberInfo.type.indexOf("UI_") == 0)
  88. {
  89. writer.writeln('%s = (%s)%s.Create(comp.GetChild("%s"));', memberInfo.varName, memberInfo.type, memberInfo.type, memberInfo.name);
  90. }
  91. else
  92. writer.writeln('%s = (%s)comp.GetChild("%s");', memberInfo.varName, memberInfo.type, memberInfo.name);
  93. }
  94. else
  95. {
  96. if(memberInfo.type.indexOf("UI_") == 0)
  97. {
  98. writer.writeln('%s = (%s)%s.Create(comp.GetChildAt(%s));', memberInfo.varName, memberInfo.type, memberInfo.type, memberInfo.index);
  99. }
  100. else
  101. writer.writeln('%s = (%s)comp.GetChildAt(%s);', memberInfo.varName, memberInfo.type, memberInfo.index);
  102. }
  103. }
  104. else if (memberInfo.group == 1) {
  105. if (getMemberByName)
  106. writer.writeln('%s = comp.GetController("%s");', memberInfo.varName, memberInfo.name);
  107. else
  108. writer.writeln('%s = comp.GetControllerAt(%s);', memberInfo.varName, memberInfo.index);
  109. }
  110. else {
  111. if (getMemberByName)
  112. writer.writeln('%s = comp.GetTransition("%s");', memberInfo.varName, memberInfo.name);
  113. else
  114. writer.writeln('%s = comp.GetTransitionAt(%s);', memberInfo.varName, memberInfo.index);
  115. }
  116. }
  117. writer.endBlock();
  118. writer.writeln('public void Dispose(bool disposeTarget = false)');
  119. writer.startBlock();
  120. for (let j: number = 0; j < memberCnt; j++) {
  121. let memberInfo = members.get_Item(j);
  122. if(memberInfo.type.indexOf("UI_") == 0)
  123. {
  124. writer.writeln('%s.Dispose();', memberInfo.varName);
  125. }
  126. writer.writeln('%s = null;', memberInfo.varName);
  127. }
  128. writer.writeln('if(disposeTarget && target != null)');
  129. writer.startBlock();
  130. writer.writeln('target.RemoveFromParent();');
  131. writer.writeln('target.Dispose();');
  132. writer.endBlock();
  133. writer.writeln('target = null;');
  134. writer.endBlock();
  135. writer.endBlock(); //class
  136. writer.endBlock(); //namepsace
  137. writer.save(exportCodePath + '/' + classInfo.className + '.cs');
  138. }
  139. writer.reset();
  140. }
  141. export { genCode };