ui-template.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 getAutoUIName = function (url) {
  28. return 'auto_' + path.basenameNoExt(url);
  29. }
  30. module.exports = {
  31. init() {
  32. configUtil.initCfg((data) => {
  33. outputRelativePath = data.uiOutputPath;
  34. outputFullPath = path.join(projectPath, outputRelativePath);
  35. });
  36. templatePath = Editor.url('packages://ui-creator/core/ui-template.txt');
  37. },
  38. dealFolder(assetInfo) {
  39. let url = assetInfo.url;
  40. if (!fs.existsSync(outputFullPath)) {
  41. fs.mkdirsSync(outputFullPath);
  42. }
  43. let moduleName = path.basenameNoExt(url);
  44. let moduleFolder = path.join(outputFullPath, moduleName);
  45. if (!fs.existsSync(moduleFolder)) {
  46. fs.mkdirsSync(moduleFolder);
  47. }
  48. },
  49. dealPrefab(assetInfo) {
  50. let url = assetInfo.url;
  51. if (!fs.existsSync(outputFullPath)) {
  52. fs.mkdirsSync(outputFullPath);
  53. }
  54. //获取文件夹名称
  55. let moduleName = path.basenameNoExt(path.dirname(url));
  56. //创建对应父文件夹
  57. let moduleFolder = path.join(outputFullPath, moduleName);
  58. if (!fs.existsSync(moduleFolder)) {
  59. fs.mkdirsSync(moduleFolder);
  60. }
  61. //生成对应的ts文件
  62. let uiName = 'UI' + firstCharUpper(path.basenameNoExt(url));
  63. let exportUIPath = `db://${outputRelativePath}/${moduleName}/${uiName}.ts`;
  64. let prefabPath = '';
  65. if (assetInfo.type === 'prefab') {
  66. prefabPath = getPrefabPath(url);
  67. }
  68. let autoUIName = getAutoUIName(url);
  69. let scriptTemplate = fs.readFileSync(templatePath, 'utf8') + "";
  70. scriptTemplate = scriptTemplate.replace(/_AUTOUI/g, autoUIName);
  71. scriptTemplate = scriptTemplate.replace(/_MODULE/g, moduleName);
  72. scriptTemplate = scriptTemplate.replace(/_PREFABPATH/g, prefabPath);
  73. scriptTemplate = scriptTemplate.replace(/_UINAME/g, uiName);
  74. if (adb.exists(exportUIPath)) {
  75. Editor.warn(`文件${exportUIPath}已存在`);
  76. } else {
  77. adb.create(exportUIPath, scriptTemplate);
  78. }
  79. }
  80. }