GenCode_TS.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. local function genCode(handler)
  2. local settings = handler.project:GetSettings("Publish").codeGeneration
  3. local codePkgName = handler:ToFilename(handler.pkg.name); --convert chinese to pinyin, remove special chars etc.
  4. local exportCodePath = handler.exportCodePath..'/'..codePkgName
  5. local namespaceName = codePkgName
  6. local ns = 'fgui'
  7. if settings.packageName~=nil and settings.packageName~='' then
  8. namespaceName = settings.packageName..'.'..namespaceName;
  9. end
  10. --CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
  11. local classes = handler:CollectClasses(settings.ignoreNoname, settings.ignoreNoname, ns)
  12. handler:SetupCodeFolder(exportCodePath, "ts") --check if target folder exists, and delete old files
  13. local getMemberByName = settings.getMemberByName
  14. local classCnt = classes.Count
  15. local writer = CodeWriter.new({ blockFromNewLine=false, usingTabs=true })
  16. for i=0,classCnt-1 do
  17. local classInfo = classes[i]
  18. local members = classInfo.members
  19. local references = classInfo.references
  20. writer:reset()
  21. local refCount = references.Count
  22. if refCount>0 then
  23. for j=0,refCount-1 do
  24. local ref = references[j]
  25. writer:writeln('import %s from "./%s";', ref, ref)
  26. end
  27. writer:writeln()
  28. end
  29. if handler.project.type==ProjectType.ThreeJS then
  30. writer:writeln('import * as fgui from "fairygui-three";');
  31. if refCount==0 then writer:writeln() end
  32. end
  33. writer:writeln('export default class %s extends %s', classInfo.className, classInfo.superClassName)
  34. writer:startBlock()
  35. writer:writeln()
  36. local memberCnt = members.Count
  37. for j=0,memberCnt-1 do
  38. local memberInfo = members[j]
  39. writer:writeln('public %s:%s;', memberInfo.varName, memberInfo.type)
  40. end
  41. writer:writeln('public static URL:string = "ui://%s%s";', handler.pkg.id, classInfo.resId)
  42. writer:writeln()
  43. writer:writeln('public static createInstance():%s', classInfo.className)
  44. writer:startBlock()
  45. writer:writeln('return <%s>(%s.UIPackage.createObject("%s", "%s"));', classInfo.className, ns, handler.pkg.name, classInfo.resName)
  46. writer:endBlock()
  47. writer:writeln()
  48. writer:writeln('protected onConstruct():void')
  49. writer:startBlock()
  50. for j=0,memberCnt-1 do
  51. local memberInfo = members[j]
  52. if memberInfo.group==0 then
  53. if getMemberByName then
  54. writer:writeln('this.%s = <%s>(this.getChild("%s"));', memberInfo.varName, memberInfo.type, memberInfo.name)
  55. else
  56. writer:writeln('this.%s = <%s>(this.getChildAt(%s));', memberInfo.varName, memberInfo.type, memberInfo.index)
  57. end
  58. elseif memberInfo.group==1 then
  59. if getMemberByName then
  60. writer:writeln('this.%s = this.getController("%s");', memberInfo.varName, memberInfo.name)
  61. else
  62. writer:writeln('this.%s = this.getControllerAt(%s);', memberInfo.varName, memberInfo.index)
  63. end
  64. else
  65. if getMemberByName then
  66. writer:writeln('this.%s = this.getTransition("%s");', memberInfo.varName, memberInfo.name)
  67. else
  68. writer:writeln('this.%s = this.getTransitionAt(%s);', memberInfo.varName, memberInfo.index)
  69. end
  70. end
  71. end
  72. writer:endBlock()
  73. writer:endBlock() --class
  74. writer:save(exportCodePath..'/'..classInfo.className..'.ts')
  75. end
  76. writer:reset()
  77. local binderName = codePkgName..'Binder'
  78. for i=0,classCnt-1 do
  79. local classInfo = classes[i]
  80. writer:writeln('import %s from "./%s";', classInfo.className, classInfo.className)
  81. end
  82. if handler.project.type==ProjectType.ThreeJS then
  83. writer:writeln('import * as fgui from "fairygui-three";');
  84. writer:writeln();
  85. end
  86. writer:writeln()
  87. writer:writeln('export default class %s', binderName)
  88. writer:startBlock()
  89. writer:writeln('public static bindAll():void')
  90. writer:startBlock()
  91. for i=0,classCnt-1 do
  92. local classInfo = classes[i]
  93. writer:writeln('%s.UIObjectFactory.setExtension(%s.URL, %s);', ns, classInfo.className, classInfo.className)
  94. end
  95. writer:endBlock() --bindall
  96. writer:endBlock() --class
  97. writer:save(exportCodePath..'/'..binderName..'.ts')
  98. end
  99. return genCode