Complete Cocos Creator port with level bundles, themes, and tooling.
Adds level prefabs, theme assets, audio, extensions, and deployment scripts for the Unity WebGL migration. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
302
extensions/plugin-import-2x/dist/convertor/anim.js
vendored
Normal file
302
extensions/plugin-import-2x/dist/convertor/anim.js
vendored
Normal file
@@ -0,0 +1,302 @@
|
||||
'use strict';
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AnimImporter = void 0;
|
||||
const base_1 = require("../common/base");
|
||||
const AnimationClip_1 = require("../components/AnimationClip");
|
||||
class AnimImporter extends base_1.ImporterBase {
|
||||
constructor() {
|
||||
super(...arguments);
|
||||
this.type = 'anim';
|
||||
}
|
||||
// 合并 commonTarget
|
||||
mergersCommonTarget(key, curve, commonTargets, pathKey) {
|
||||
const commonTarget = {
|
||||
modifiers: [],
|
||||
};
|
||||
pathKey && commonTarget.modifiers.push(pathKey);
|
||||
if (key === 'x' || key === 'y' || key === 'z') {
|
||||
commonTarget.modifiers.push('position');
|
||||
const idx = commonTargets.findIndex((target) => {
|
||||
return JSON.stringify(target.modifiers) === JSON.stringify(commonTarget.modifiers);
|
||||
});
|
||||
if (idx === -1) {
|
||||
curve.commonTarget = commonTargets.length;
|
||||
commonTargets.push(commonTarget);
|
||||
}
|
||||
else {
|
||||
curve.commonTarget = idx;
|
||||
}
|
||||
curve.modifiers.push(this.getModifier(key));
|
||||
}
|
||||
else if (key === 'scaleX' || key === 'scaleY' || key === 'scaleZ') {
|
||||
commonTarget.modifiers.push('scale');
|
||||
const idx = commonTargets.findIndex((target) => {
|
||||
return JSON.stringify(target.modifiers) === JSON.stringify(commonTarget.modifiers);
|
||||
});
|
||||
if (idx === -1) {
|
||||
curve.commonTarget = commonTargets.length;
|
||||
commonTargets.push(commonTarget);
|
||||
}
|
||||
else {
|
||||
curve.commonTarget = idx;
|
||||
}
|
||||
curve.modifiers.push(this.getModifier(key));
|
||||
}
|
||||
else {
|
||||
pathKey && curve.modifiers.push(pathKey);
|
||||
curve.modifiers.push(this.getModifier(key));
|
||||
}
|
||||
}
|
||||
// 转换 Modifier
|
||||
getModifier(key) {
|
||||
if (key === 'angle' || key === 'rotation') {
|
||||
return 'eulerAngles';
|
||||
}
|
||||
else if (key === 'scaleX') {
|
||||
return 'x';
|
||||
}
|
||||
else if (key === 'scaleY') {
|
||||
return 'y';
|
||||
}
|
||||
else if (key === 'scaleZ') {
|
||||
return 'z';
|
||||
}
|
||||
else if (key === 'top' || key === 'bottom' ||
|
||||
key === 'left' || key === 'right' ||
|
||||
key === 'horizontalCenter' ||
|
||||
key === 'verticalCenter') {
|
||||
return 'editor' + key.substring(0, 1).toLocaleUpperCase() + key.substring(key.length, 1);
|
||||
}
|
||||
return key;
|
||||
}
|
||||
// 转换 value 数值
|
||||
getValue(key, value) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (key === 'angle' || key === 'rotation') {
|
||||
return {
|
||||
__type__: "cc.Vec3",
|
||||
x: 0,
|
||||
y: 0,
|
||||
z: value !== undefined ? value : 0,
|
||||
};
|
||||
}
|
||||
else if (key === 'scale') {
|
||||
return {
|
||||
__type__: "cc.Vec3",
|
||||
x: value.x !== undefined ? value.x : 1,
|
||||
y: value.y !== undefined ? value.y : 1,
|
||||
z: value.z !== undefined ? value.z : 1,
|
||||
};
|
||||
}
|
||||
else if (key === 'position') {
|
||||
return {
|
||||
__type__: "cc.Vec3",
|
||||
x: value[0] !== undefined ? value[0] : 0,
|
||||
y: value[1] !== undefined ? value[1] : 0,
|
||||
z: 0,
|
||||
};
|
||||
}
|
||||
if (value && value.__uuid__) {
|
||||
if (key === 'spriteFrame' || key === 'texture') {
|
||||
value = yield base_1.ImporterBase.getUuid(value.__uuid__, key);
|
||||
}
|
||||
else {
|
||||
value = yield base_1.ImporterBase.getUuid(value.__uuid__);
|
||||
}
|
||||
return {
|
||||
__uuid__: value
|
||||
};
|
||||
}
|
||||
return value;
|
||||
});
|
||||
}
|
||||
getPropsForCurveData(props, animationClipOrArray, pathKey) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const animationClip = Array.isArray(animationClipOrArray) ? animationClipOrArray[0] : animationClipOrArray;
|
||||
for (const key in props) {
|
||||
const prop = props[key];
|
||||
const frames = [];
|
||||
const values = [];
|
||||
const curve = {
|
||||
modifiers: [],
|
||||
data: {
|
||||
keys: animationClip._keys.length,
|
||||
values: values,
|
||||
easingMethods: {},
|
||||
},
|
||||
};
|
||||
if (key === 'opacity') {
|
||||
const component = {
|
||||
__type__: "cc.animation.ComponentPath",
|
||||
component: 'cc.UIOpacity',
|
||||
};
|
||||
pathKey && curve.modifiers.push(pathKey);
|
||||
curve.modifiers.push({
|
||||
__id__: animationClipOrArray.length,
|
||||
});
|
||||
curve.modifiers.push(this.getModifier(key));
|
||||
animationClipOrArray.push(component);
|
||||
}
|
||||
else if (key === 'width' || key === 'height') {
|
||||
const component = {
|
||||
__type__: "cc.animation.ComponentPath",
|
||||
component: 'cc.UITransform',
|
||||
};
|
||||
let compIdx = animationClipOrArray.findIndex((item) => {
|
||||
return item.__type__ === component.__type__ && item.component === component.component;
|
||||
});
|
||||
if (compIdx === -1) {
|
||||
compIdx = animationClipOrArray.length;
|
||||
animationClipOrArray.push(component);
|
||||
}
|
||||
const commonTarget = {
|
||||
modifiers: [],
|
||||
};
|
||||
pathKey && commonTarget.modifiers.push(pathKey);
|
||||
commonTarget.modifiers.push({
|
||||
__id__: compIdx,
|
||||
});
|
||||
commonTarget.modifiers.push('contentSize');
|
||||
let idx = animationClip._commonTargets.findIndex((target) => {
|
||||
return JSON.stringify(target.modifiers) === JSON.stringify(commonTarget.modifiers);
|
||||
});
|
||||
if (idx === -1) {
|
||||
idx = animationClip._commonTargets.length;
|
||||
animationClip._commonTargets.push(commonTarget);
|
||||
}
|
||||
curve.commonTarget = idx;
|
||||
curve.modifiers.push(this.getModifier(key));
|
||||
}
|
||||
else {
|
||||
this.mergersCommonTarget(key, curve, animationClip._commonTargets, pathKey);
|
||||
}
|
||||
for (let k = 0; k < prop.length; k++) {
|
||||
const item = prop[k];
|
||||
frames.push(item.frame);
|
||||
const value = yield this.getValue(key, item.value);
|
||||
curve.data.values.push(value);
|
||||
if (item.curve) {
|
||||
curve.data.easingMethods[k] = item.curve;
|
||||
}
|
||||
}
|
||||
animationClip._keys.push(frames);
|
||||
animationClip._curves.push(curve);
|
||||
}
|
||||
return animationClipOrArray.length > 1 ? animationClipOrArray : animationClip;
|
||||
});
|
||||
}
|
||||
getCurveDataForComps(comps, animationClipArray, pathKey) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
for (const key in comps) {
|
||||
// component
|
||||
const comp = comps[key];
|
||||
const component = {
|
||||
__type__: "cc.animation.ComponentPath",
|
||||
component: key,
|
||||
};
|
||||
for (const propKey in comp) {
|
||||
// component 内部属性
|
||||
const props = comp[propKey];
|
||||
const frames = [];
|
||||
const values = [];
|
||||
const curve = {
|
||||
modifiers: [],
|
||||
data: {
|
||||
keys: animationClipArray[0]._keys.length,
|
||||
values: values,
|
||||
easingMethods: {},
|
||||
},
|
||||
};
|
||||
pathKey && curve.modifiers.push(pathKey);
|
||||
curve.modifiers.push({
|
||||
// 下标从 1 开始
|
||||
__id__: animationClipArray.length,
|
||||
});
|
||||
curve.modifiers.push(this.getModifier(propKey));
|
||||
for (let k = 0; k < props.length; k++) {
|
||||
const prop = props[k];
|
||||
frames.push(prop.frame);
|
||||
const value = yield this.getValue(propKey, prop.value);
|
||||
curve.data.values.push(value);
|
||||
if (prop.curve) {
|
||||
curve.data.easingMethods[k] = prop.curve;
|
||||
}
|
||||
}
|
||||
animationClipArray[0]._keys.push(frames);
|
||||
animationClipArray[0]._curves.push(curve);
|
||||
}
|
||||
animationClipArray.push(component);
|
||||
}
|
||||
return animationClipArray;
|
||||
});
|
||||
}
|
||||
getCurveDataForPaths(paths, animationClipArray) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
for (const path in paths) {
|
||||
const hierarchyPaths = {
|
||||
"__type__": "cc.animation.HierarchyPath",
|
||||
"path": path,
|
||||
};
|
||||
animationClipArray.push(hierarchyPaths);
|
||||
const data = paths[path];
|
||||
if (data.props) {
|
||||
animationClipArray = yield this.getPropsForCurveData(data.props, animationClipArray, {
|
||||
"__id__": animationClipArray.length - 1,
|
||||
});
|
||||
}
|
||||
if (data.comps) {
|
||||
const __id__ = animationClipArray.findIndex(item => {
|
||||
return item.path === path;
|
||||
});
|
||||
animationClipArray = yield this.getCurveDataForComps(data.comps, animationClipArray, {
|
||||
"__id__": __id__,
|
||||
});
|
||||
}
|
||||
}
|
||||
return animationClipArray;
|
||||
});
|
||||
}
|
||||
getCurveData(curveData, animationClip) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
if (curveData.props) {
|
||||
animationClip = Array.isArray(animationClip) ? animationClip : [animationClip];
|
||||
animationClip = yield this.getPropsForCurveData(curveData.props, animationClip);
|
||||
}
|
||||
if (curveData.comps) {
|
||||
animationClip = Array.isArray(animationClip) ? animationClip : [animationClip];
|
||||
animationClip = yield this.getCurveDataForComps(curveData.comps, animationClip);
|
||||
}
|
||||
if (curveData.paths) {
|
||||
animationClip = Array.isArray(animationClip) ? animationClip : [animationClip];
|
||||
animationClip = yield this.getCurveDataForPaths(curveData.paths, animationClip);
|
||||
}
|
||||
return animationClip;
|
||||
});
|
||||
}
|
||||
import() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const anim2D = this.readJSONSync();
|
||||
const animationClip = AnimationClip_1.AnimationClip.create();
|
||||
animationClip._name = anim2D._name;
|
||||
animationClip.sample = anim2D.sample;
|
||||
animationClip.speed = anim2D.speed;
|
||||
animationClip.wrapMode = anim2D.wrapMode;
|
||||
animationClip.events = anim2D.events;
|
||||
animationClip._duration = anim2D._duration;
|
||||
this._2dTo3dSource = yield this.getCurveData(anim2D.curveData, animationClip);
|
||||
this._3dMeta.ver = '1.0.6';
|
||||
this._3dMeta.importer = "animation-clip";
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.AnimImporter = AnimImporter;
|
||||
Reference in New Issue
Block a user