new_script_rule.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. * 新建脚本规则
  3. * 修改重启Creator后生效
  4. */
  5. let path = require("path")
  6. module.exports = {
  7. /**
  8. * 1.获得新建脚本保存路径
  9. * @param {string} templePath - 模板文件路径 c://xxx/xxx/define.js
  10. * @param {string} sceneUrl - 场景或预制节点路径 'db://assets/scene/gameScene.fire' or 'db://assets/panel/login.prefab'
  11. * @param {string} currNodeName - 当前选中的 node.name
  12. * @returns - 返回新建脚本保存路径
  13. */
  14. getSavePath(templePath,sceneUrl,currNodeName){
  15. // 在scene.fire文件同级目录下保存脚本
  16. let saveUrl = path.dirname(sceneUrl) + '/' + 'scripts/' + currNodeName + path.extname(templePath)
  17. // saveUrl = 'db://assets/scene/scripts/node-name.js'
  18. // db://assets/ 为项目根目录
  19. return saveUrl;
  20. },
  21. /**
  22. * 2.获得新建脚本保存内容
  23. * @param {string} originText - 脚本代码内容
  24. * @param {string} saveUrl - 保存路径
  25. * @param {cc.Node} bindNode - 当前脚本绑定的 node
  26. * @returns - 返回脚本内容用于
  27. */
  28. getSaveText(originText,saveUrl,bindNode){
  29. let findObj = originText.match(/(\s+?class\s+?)([a-zA-Z_$][\w]*)/);
  30. if(findObj){
  31. // 替换类名,删除特殊字符
  32. let className = bindNode.name.replace(/(\W|\d|_)/g, '')
  33. // 头部大写
  34. className = className[0].toUpperCase() + className.substr(1)
  35. let startPos = findObj.index+findObj[1].length;
  36. let endPos = findObj.index+findObj[0].length;
  37. originText = originText.substr(0,startPos)+className+originText.substr(endPos)
  38. }
  39. return originText;
  40. },
  41. /**
  42. * 3.创建完成回调
  43. * @param {string} saveUrl - 保存路径
  44. * @param {string} originText - 脚本代码内容
  45. * @param {cc.Node} bindNode - 当前脚本绑定的 node
  46. */
  47. onComplete(saveUrl,originText,bindNode,jsFileName){
  48. // 获得已绑定node的组件
  49. // let comp = bindNode.getComponent(jsFileName);
  50. // 此阶段可对脚本成员变量进行赋值绑定其它组件关系
  51. // console.log(comp);
  52. },
  53. };