GenCode_CSharp.ts 4.5 KB

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