Files
2026-03-30 09:39:59 +08:00

108 lines
4.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const vue_1 = __importDefault(require("../../../../vue"));
const utils_1 = require("../../utils");
/**
* 根据语言获取脚本内容
*/
function getScript(name) {
const basePath = '../../../../extensions/app/assets/base/BaseManager';
return 'import { _decorator } from \'cc\';\r\n' +
'import BaseManager from \'' + basePath + '\';\r\n' +
'const { ccclass, property } = _decorator;\r\n' +
'@ccclass(\'' + name + '\')\r\n' +
'export class ' + name + ' extends BaseManager {\r\n' +
' // [无序] 加载完成时触发\r\n' +
' protected onLoad() { }\r\n\r\n' +
' // [无序] 自身初始化完成, init执行完毕后被调用\r\n' +
' protected onInited() { }\r\n\r\n' +
' // [无序] 所有manager初始化完成\r\n' +
' protected onFinished() { }\r\n\r\n' +
' // [无序] 初始化manager在初始化完成后调用finish方法\r\n' +
' protected init(finish: Function) {\r\n' +
' super.init(finish);\r\n' +
' }\r\n' +
'}';
}
exports.default = vue_1.default.extend({
template: utils_1.getResPanel('create-manager'),
data() {
return {
inputName: '',
display: '',
showLoading: false
};
},
methods: {
async onClickCreate() {
const name = this.inputName;
if (/^[a-z][a-z0-9-]*[a-z0-9]+$/.test(name) === false) {
this.display = '[错误] 名字不合法\n1、不能以数字开头\n2、不能有大写字母\n3、分隔符只能使用-\n4、不能以分隔符开头或结尾';
return;
}
const rootPath = 'db://assets/app-builtin/app-manager';
const managerName = `${utils_1.stringCase(name)}Manager`;
const folderName = name;
const folderPath = `${rootPath}/${folderName}`;
const scriptUrl = `${folderPath}/${managerName}.ts`;
const prefabUrl = `${folderPath}/${managerName}.prefab`;
// 创建前确认
const createResponse = await Editor.Dialog.info('请确认', { detail: managerName, buttons: ['创建并打开', '仅创建', '取消'], default: 0, cancel: 2 });
if (createResponse.response == 2) {
return;
}
this.display = '创建中';
this.showLoading = true;
if (fs_1.existsSync(utils_1.convertUrlToPath(folderPath))) {
this.showLoading = false;
this.display = `[错误] 目录已存在, 请删除\n${folderPath}`;
return;
}
// 目录如果不存在则创建
if (!await utils_1.createFolderByUrl(rootPath, {
meta: utils_1.getResMeta('app-manager'),
readme: utils_1.getResReadme('app-manager'),
subFolders: [
{
folder: folderName,
readme: `1、${managerName}所在文件夹, 通过app.manager.${utils_1.stringCase(name, true)}的方式调用\n2、如不再需要可以直接删除此文件夹`
}
]
})) {
this.showLoading = false;
this.display = `[错误] 创建目录失败\n${folderPath}`;
return;
}
// 创建script
const createScriptResult = await Editor.Message.request('asset-db', 'create-asset', scriptUrl, getScript(managerName)).catch(_ => null);
if (!createScriptResult) {
this.showLoading = false;
this.display = `[错误] 创建脚本失败\n${scriptUrl}`;
return;
}
// 创建prefab
const createPrefabResult = await Editor.Message.request('scene', 'execute-scene-script', {
name: 'app',
method: 'createPrefab',
args: [managerName, prefabUrl]
});
if (!createPrefabResult) {
this.showLoading = false;
this.display = `[错误] 创建预制体失败\n${prefabUrl}`;
return;
}
this.showLoading = false;
this.display = `[成功] 创建成功\n${rootPath}`;
Editor.Message.send('assets', 'twinkle', scriptUrl);
// 是否打开
if (createResponse.response == 0) {
Editor.Message.request('asset-db', 'open-asset', scriptUrl);
}
}
},
});