消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

276 lines
33 KiB

1 week ago
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.Finder = void 0;
const Path = __importStar(require("path"));
const logger_1 = require("./logger");
const object_util_1 = require("./object-util");
const parser_1 = require("./parser");
const FileUtil = require('./lib/eazax/file-util');
var Finder;
(function (Finder) {
/**
* 使用 uuid 进行查找
* @param {string} uuid
*/
async function findByUuid(assetInfo) {
//
let uuid = assetInfo.uuid;
// 记录子资源 uuid
const subAssetUuids = [];
// 资源类型检查
if (assetInfo.type === 'cc.ImageAsset') {
// 纹理子资源
const subAssetInfos = assetInfo.subAssets;
for (const key in subAssetInfos) {
const subAssetInfo = subAssetInfos[key];
subAssetUuids.push(subAssetInfo.uuid);
}
}
else if (assetInfo.type === 'cc.Script') {
// 脚本资源
uuid = Editor.Utils.UUID.compressUUID(uuid, false);
}
// 项目assets目录路径
const assetsFsPath = await Editor.Message.request('asset-db', 'query-path', 'db://assets');
(0, logger_1.print)('log', `assetsFsPath: ${assetsFsPath}`);
// 查找资源引用
const results = [];
const selfResults = await findRefs(uuid, assetsFsPath);
for (let i = 0, l = selfResults.length; i < l; i++) {
results.push(selfResults[i]);
}
// 查找子资源的引用
if (subAssetUuids.length > 0) {
for (let i = 0; i < subAssetUuids.length; i++) {
const subResults = await findRefs(subAssetUuids[i], assetsFsPath);
for (let j = 0; j < subResults.length; j++) {
results.push(subResults[j]);
}
}
}
return results;
}
Finder.findByUuid = findByUuid;
/** 扩展名对应文件类型 */
const ASSET_TYPE_MAP = {
// 场景
'.fire': 'scene',
'.scene': 'scene',
// 预制体
'.prefab': 'prefab',
// 动画
'.anim': 'animation',
// 材质
'.mtl': 'material',
// 字体
'.fnt.meta': 'font',
};
/**
* 查找引用
* @param {string} uuid
* @returns {Promise<{ type: string, url: string, refs?: object[]}[]>}
*/
async function findRefs(uuid, assetsFsPath) {
const result = [];
// 文件处理函数
const handler = async (fsPath) => {
// 获取文件后缀
const ext = Path.extname(fsPath);
// 绝对路径转资源url
const url = await Editor.Message.request('asset-db', 'query-url', fsPath);
if (ext === '.fire' || ext === '.scene' || ext === '.prefab') {
// 场景和预制体资源(转为节点树)
const tree = await parser_1.Parser.getNodeTree(fsPath);
if (!tree) {
return;
}
// 遍历第一层节点查找引用
const refs = [];
for (let children = tree.children, i = 0, l = children.length; i < l; i++) {
await findRefsInNode(tree, children[i], uuid, refs);
}
// 保存当前文件引用结果
if (refs.length > 0) {
result.push({
type: ASSET_TYPE_MAP[ext],
url,
refs,
});
}
}
else if (ext === '.anim') {
// 动画资源
const data = JSON.parse(await FileUtil.readFile(fsPath)), curveData = data['curveData'], contains = object_util_1.ObjectUtil.containsValue(curveData, uuid);
if (contains) {
result.push({
type: ASSET_TYPE_MAP[ext],
url
});
}
}
else if (ext === '.mtl' || fsPath.endsWith('.fnt.meta')) {
// 材质和字体资源
const data = JSON.parse(await FileUtil.readFile(fsPath));
// 需排除自己
if ((data['uuid'] === uuid)) {
return;
}
// 是否引用
const contains = object_util_1.ObjectUtil.containsValue(data, uuid);
if (contains) {
const _ext = (ext === '.mtl') ? '.mtl' : '.fnt.meta';
result.push({
type: ASSET_TYPE_MAP[_ext],
url,
});
}
}
};
// 遍历资源目录下的文件
await FileUtil.map(assetsFsPath, handler);
return result;
}
/**
* 查找节点中的引用
* @param {object} tree 节点树
* @param {object} node 目标节点
* @param {string} uuid 查找的 uuid
* @param {object[]} result 结果
*/
async function findRefsInNode(tree, node, uuid, result) {
// 检查节点上的组件是否有引用
const components = node.components;
if (components && components.length > 0) {
for (let i = 0, l = components.length; i < l; i++) {
// 获取包含uuid的字段
const properties = getContainsUuidProperties(components[i], uuid);
if (properties.length === 0) {
continue;
}
// 资源类型
let type = components[i].__type__;
// 是否为脚本资源(自定义脚本)
if (Editor.Utils.UUID.isUUID(type)) {
const scriptUuid = Editor.Utils.UUID.decompressUUID(type);
const assetInfo = await Editor.Message.request('asset-db', 'query-asset-info', scriptUuid);
if (assetInfo) {
// 获取脚本名称
type = Path.basename(assetInfo.url);
}
}
// 遍历相关属性名
for (let i = 0; i < properties.length; i++) {
let property = properties[i];
if (property === '__type__') {
property = null;
}
else {
// 处理属性名称(Label 组件需要特殊处理)
if (type === 'cc.Label' && property === '_N$file') {
property = 'font';
}
// 去除属性名的前缀
if (property.startsWith('_N$')) {
property = property.replace('_N$', '');
}
else if (property[0] === '_') {
property = property.substring(1);
}
}
// 保存结果
result.push({
type: 'node',
node: node.path,
component: type,
property,
});
}
}
}
// 检查预制体是否有引用
const prefab = node.prefab;
if (prefab) {
// 排除预制体自己
// if (uuid !== tree.uuid) {
const contains = object_util_1.ObjectUtil.containsValue(prefab, uuid);
if (contains) {
result.push({
node: node.path,
});
}
// }
}
// 遍历子节点
const children = node.children;
if (children && children.length > 0) {
for (let i = 0, l = children.length; i < l; i++) {
await findRefsInNode(tree, children[i], uuid, result);
}
}
}
/**
* 获取对象包含指定 uuid 的属性
* @param {object} object 对象
* @param {string} uuid
* @returns {string[]}
*/
function getContainsUuidProperties(object, uuid) {
const properties = [];
const search = (target, path) => {
if (Object.prototype.toString.call(target) === '[object Object]') {
for (const key in target) {
const curPath = (path != null) ? `${path}.${key}` : key;
if (target[key] === uuid) {
properties.push(path || key);
}
search(target[key], curPath);
}
}
else if (Array.isArray(target)) {
for (let i = 0, l = target.length; i < l; i++) {
const curPath = (path != null) ? `${path}[${i}]` : `[${i}]`;
if (target[i] === uuid) {
properties.push(path || `[${i}]`);
}
search(target[i], curPath);
}
}
};
search(object, null);
return properties;
}
})(Finder || (exports.Finder = Finder = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL2ZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSwyQ0FBNkI7QUFDN0IscUNBQWlDO0FBQ2pDLCtDQUEyQztBQUMzQyxxQ0FBZ0Q7QUFFaEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFbEQsSUFBaUIsTUFBTSxDQW9QdEI7QUFwUEQsV0FBaUIsTUFBTTtJQUVuQjs7O09BR0c7SUFDSSxLQUFLLFVBQVUsVUFBVSxDQUFDLFNBQW9CO1FBRWpELEVBQUU7UUFDRixJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzFCLGFBQWE7UUFDYixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsU0FBUztRQUNULElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUNyQyxRQUFRO1lBQ1IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUMxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUM5QixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLE9BQU87WUFDUCxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsZUFBZTtRQUNmLE1BQU0sWUFBWSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFB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