GenCode_CSharp.lua 4.2 KB

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