ui-template.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. 'use strict';
  2. const fs = require('fire-fs');
  3. const path = require('fire-path');
  4. const configUtil = require('./config-util');
  5. const projectPath = Editor.Project.path;
  6. const adb = Editor.assetdb;
  7. var outputRelativePath;
  8. var outputFullPath;
  9. var scriptTemplate;
  10. var templatePath;
  11. // 首字母大写
  12. var firstCharUpper = function (str) {
  13. str = str.substring(0, 1).toUpperCase() + str.substring(1);
  14. return str;
  15. }
  16. /**
  17. * 输入:db://assets/resources/prefab/Fight/FightSetting.prefab
  18. * 输出:Fight/FightSetting
  19. */
  20. // var getPrefabPath = function (url) {
  21. // let prefabStr = 'prefab/'
  22. // let prefabSuffix = '.prefab';
  23. // let start = url.indexOf(prefabStr) + prefabStr.length;
  24. // let end = url.indexOf(prefabSuffix);
  25. // return url.substring(start, end);
  26. // }
  27. var getPrefabPath = function (url) {
  28. let list = url.split("/");
  29. let start = list[list.length - 2];
  30. let prefabSuffix = '.prefab';
  31. let end = list[list.length - 1];
  32. end = end.slice(0, -prefabSuffix.length);
  33. return start + "/" + end;
  34. }
  35. var getAutoUIName = function (url) {
  36. return 'auto_' + path.basenameNoExt(url);
  37. }
  38. module.exports = {
  39. init() {
  40. configUtil.initCfg((data) => {
  41. outputRelativePath = data.uiOutputPath;
  42. outputFullPath = path.join(projectPath, outputRelativePath);
  43. });
  44. templatePath = Editor.url('packages://ui-creator/core/ui-template.txt');
  45. },
  46. dealFolder(assetInfo) {
  47. let url = assetInfo.url;
  48. if (!fs.existsSync(outputFullPath)) {
  49. fs.mkdirsSync(outputFullPath);
  50. }
  51. let moduleName = path.basenameNoExt(url);
  52. let moduleFolder = path.join(outputFullPath, moduleName);
  53. if (!fs.existsSync(moduleFolder)) {
  54. fs.mkdirsSync(moduleFolder);
  55. }
  56. },
  57. dealPrefab(assetInfo) {
  58. let url = assetInfo.url;
  59. if (!fs.existsSync(outputFullPath)) {
  60. fs.mkdirsSync(outputFullPath);
  61. }
  62. //获取文件夹名称
  63. let moduleName = path.basenameNoExt(path.dirname(url));
  64. //创建对应父文件夹
  65. let moduleFolder = path.join(outputFullPath, moduleName);
  66. if (!fs.existsSync(moduleFolder)) {
  67. fs.mkdirsSync(moduleFolder);
  68. }
  69. //生成对应的ts文件
  70. let uiName = 'UI' + firstCharUpper(path.basenameNoExt(url));
  71. let exportUIPath = `db://${outputRelativePath}/${moduleName}/${uiName}.ts`;
  72. let prefabPath = '';
  73. if (assetInfo.type === 'prefab') {
  74. prefabPath = getPrefabPath(url);
  75. }
  76. let autoUIName = getAutoUIName(url);
  77. let scriptTemplate = fs.readFileSync(templatePath, 'utf8') + "";
  78. scriptTemplate = scriptTemplate.replace(/_AUTOUI/g, autoUIName);
  79. scriptTemplate = scriptTemplate.replace(/_MODULE/g, moduleName);
  80. scriptTemplate = scriptTemplate.replace(/_PREFABPATH/g, prefabPath);
  81. scriptTemplate = scriptTemplate.replace(/_UINAME/g, uiName);
  82. if (adb.exists(exportUIPath)) {
  83. Editor.warn(`文件${exportUIPath}已存在`);
  84. } else {
  85. adb.create(exportUIPath, scriptTemplate);
  86. }
  87. }
  88. }