消消方块阵换皮表情
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.

218 lines
25 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.Parser = void 0;
const logger_1 = require("./logger");
const object_util_1 = require("./object-util");
const FileUtil = require('./lib/eazax/file-util');
const Path = __importStar(require("path"));
/**
* 用来解析预制体/场景
*/
var Parser;
(function (Parser) {
/**
* 节点树缓存
* @type {{ [key: string]: object }}
*/
const caches = {};
/**
* 获取节点树
* @param {string} path 路径
* @returns {Promise<object>}
*/
async function getNodeTree(path) {
path = Path.normalize(path);
if (!caches[path]) {
const file = await FileUtil.readFile(path);
let data = null;
try {
data = JSON.parse(file);
}
catch (error) {
(0, logger_1.print)('warn', '文件解析失败', path);
(0, logger_1.print)('warn', error);
}
if (!data) {
return null;
}
caches[path] = convert(data);
}
return caches[path];
}
Parser.getNodeTree = getNodeTree;
/**
* 更新缓存
* @param {string} path 路径
*/
async function updateCache(path) {
path = Path.normalize(path);
if (!caches[path]) {
// 本来就没有缓存
return;
}
caches[path] = null;
await getNodeTree(path);
}
Parser.updateCache = updateCache;
/**
* 将资源解析为节点树
* @param {object} source 源数据
* @returns {object}
*/
function convert(source) {
const tree = Object.create(null);
// 第一个元素
const firstElement = source[0];
// 最后一个元素
const lastElement = source[source.length - 1];
// 类型存储在这
const type = firstElement.__type__;
if (type === 'cc.SceneAsset') {
// 场景资源
const id = firstElement.scene.__id__;
// 获取子节点列表
const children = source[id]._children;
// 类型
tree.type = 'cc.Scene';
// ID
tree.id = id;
// 场景下可以有多个一级节点
tree.children = [];
for (let i = 0, l = children.length; i < l; i++) {
const nodeId = children[i].__id__;
convertNode(source, nodeId, tree);
}
}
else if (type === 'cc.Prefab') {
// 预制体资源
const id = firstElement.data.__id__;
// 类型
tree.type = 'cc.Prefab';
// ID
tree.id = id;
// 预制体本身就是一个节点
tree.children = [];
convertNode(source, id, tree);
}
return tree;
}
/**
* 解析节点
* @param {NodeInfo[]} source 源数据
* @param {number} nodeId 节点 ID
* @param {TreeNodeInfo} parent 父节点
*/
function convertNode(source, nodeId, parent) {
// 获取节点数据
const srcNode = source[nodeId];
const node = Object.create(null);
// 基本信息
node.name = srcNode._name;
node.id = nodeId;
// TODO 更多类型
node.type = srcNode.__type__;
// 路径
const parentPath = parent.path || null;
node.path = parentPath ? `${parentPath}/${node.name}` : node.name;
// 预制体引用
const srcPrefab = srcNode._prefab;
if (srcPrefab) {
// 读取prefab数据
const id = srcPrefab.__id__;
node.prefab = extractValidInfo(source[id]);
// 预制体名称特殊一点,节点信息并不包含 _name
try {
const overrideInfo = source[id + 2];
if (overrideInfo.__type__ === 'CCPropertyOverrideInfo') {
node.path = parentPath ? `${parentPath}/${overrideInfo.value}` : overrideInfo.value;
}
}
catch (error) {
}
}
// 组件
node.components = [];
const srcComponents = srcNode._components;
if (srcComponents && srcComponents.length > 0) {
for (let i = 0, l = srcComponents.length; i < l; i++) {
const compId = srcComponents[i].__id__;
const component = extractValidInfo(source[compId]);
node.components.push(component);
}
}
// 子节点
node.children = [];
const srcChildren = srcNode._children;
if (srcChildren && srcChildren.length > 0) {
for (let i = 0, l = srcChildren.length; i < l; i++) {
const nodeId = srcChildren[i].__id__;
convertNode(source, nodeId, node);
}
}
// 保存到父节点
parent.children.push(node);
}
/**
* 提取有效信息含有 uuid
* @param {ExtraInfo} source 源数据
* @returns {{ __type__: string, _name: string, fileId?: string }}
*/
function extractValidInfo(source) {
const result = Object.create(null);
// 记录有用的属性
if (source.__type__ !== undefined) {
// 如果是component , 那么这个就是组件名
// 如果是自定义component,那么这个就是脚本的uuid(压缩过后)
result.__type__ = source.__type__;
}
if (source._name !== undefined) {
result._name = source._name;
}
if (source.fileId !== undefined) {
result.fileId = source.fileId;
}
// 记录包含 uuid 的属性
for (const key in source) {
const val = source[key];
const contains = object_util_1.ObjectUtil.containsProperty(val, '__uuid__');
if (contains) {
result[key] = val;
}
}
return result;
}
})(Parser || (exports.Parser = Parser = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc291cmNlL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxQ0FBaUM7QUFDakMsK0NBQTJDO0FBQzNDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ2xELDJDQUE2QjtBQUU3Qjs7R0FFRztBQUNILElBQWlCLE1BQU0sQ0FvTHRCO0FBcExELFdBQWlCLE1BQU07SUFDbkI7OztPQUdHO0lBQ0gsTUFBTSxNQUFNLEdBQW9DLEVBQUUsQ0FBQztJQUVuRDs7OztPQUlHO0lBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFZO1FBQzFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQztnQkFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFBLGNBQUssRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFBLGNBQUssRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDUixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFD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