Files
刘宇飞 d393302388 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>
2026-06-16 15:30:58 +08:00

423 lines
17 KiB
TypeScript

import { Animation } from "./Animation";
import { AnimationClip } from "./AnimationClip";
import { Asset } from "./Asset";
import { AudioClip } from "./AudioClip";
import { AudioSource } from "./AudioSource";
import { ArmatureDisplay } from "./ArmatureDisplay";// dragonBones.ArmatureDisplay
import { BaseNode } from "./BaseNode";
import { Billboard } from "./Billboard";
import { BitmapFont } from "./BitmapFont";
import { BlockInputEvents } from "./BlockInputEvents";
import { BoxCollider } from "./BoxCollider";
import { BoxCollider2D } from "./BoxCollider2D";
import { BufferAsset } from "./BufferAsset";
import { Button } from "./Button";
import { Camera } from "./Camera";
import { Canvas } from "./Canvas";
import { CapsuleCollider } from "./CapsuleCollider";
import { CircleCollider2D } from "./CircleCollider2D";
import { Collider } from "./Collider";
import { Collider2D } from "./Collider2D";
import { CompPrefabInfo } from "./CompPrefabInfo";
import { CompactValueTypeArray } from "./CompactValueTypeArray";
import { Component } from "./Component";
import { ComponentModifier } from "./ComponentModifier";
import { ConeCollider } from "./ConeCollider";
import { ConstantForce } from "./ConstantForce";
import { Constraint } from "./Constraint";
import { CubicSplineNumberValue } from "./CubicSplineNumberValue";
import { CubicSplineValueClass } from "./CubicSplineValueClass";
import { CurveRange } from "./CurveRange";
import { CurveValueAdapter } from "./CurveValueAdapter";
import { CylinderCollider } from "./CylinderCollider";
import { DirectionalLight } from "./DirectionalLight";
import { DistanceJoint2D } from "./DistanceJoint2D";
import { EditBox } from "./EditBox";
import { EffectAsset } from "./EffectAsset";
import { EventHandler } from "./EventHandler";
import { FixedJoint2D } from "./FixedJoint2D";
import { Font } from "./Font";
import { ForwardFlow } from "./ForwardFlow";
import { ForwardPipeline } from "./ForwardPipeline";
import { ForwardStage } from "./ForwardStage";
import { Graphics } from "./Graphics";
import { HierachyModifier } from "./HierachyModifier";
import { HingeConstraint } from "./HingeConstraint";
import { HingeJoint2D } from "./HingeJoint2D";
import { ImageAsset } from "./ImageAsset";
import { JavaScript } from "./JavaScript";
import { Joint2D } from "./Joint2D";
import { JsonAsset } from "./JsonAsset";
import { Label } from "./Label";
import { LabelAtlas } from "./LabelAtlas";
import { LabelOutline } from "./LabelOutline";
import { LabelShadow } from "./LabelShadow";
import { Layout } from "./Layout";
import { Light } from "./Light";
import { Line } from "./Line";
import { Mask } from "./Mask";
import { Material } from "./Material";
import { Mesh } from "./Mesh";
import { MeshCollider } from "./MeshCollider";
import { MeshRenderer } from "./MeshRenderer";
import { ModelLightmapSettings } from "./ModelLightmapSettings";
import { MissingScript } from "./MissingScript";
import { MotionStreak } from "./MotionStreak";
import { MouseJoint2D } from "./MouseJoint2D";
import { Node } from "./Node";
import { PageView } from "./PageView";
import { PageViewIndicator } from "./PageViewIndicator";
import { ParticleAsset } from "./ParticleAsset";
import { ParticleSystem } from "./ParticleSystem";
import { ParticleSystem2D } from "./ParticleSystem2D";
import { PhysicsMaterial } from "./PhysicsMaterial";
import { PlaneCollider } from "./PlaneCollider";
import { PointToPointConstraint } from "./PointToPointConstraint";
import { PolygonCollider2D } from "./PolygonCollider2D";
import { Prefab } from "./Prefab";
import { PrefabInfo } from "./PrefabInfo";
import { Primitive } from "./Primitive";
import { PrivateNode } from "./PrivateNode";
import { ProgressBar } from "./ProgressBar";
import { RawAsset } from "./RawAsset";
import { RelativeJoint2D } from "./RelativeJoint2D";
import { RenderFlow } from "./RenderFlow";
import { RenderPipeline } from "./RenderPipeline";
import { RenderStage } from "./RenderStage";
import { RenderTexture } from "./RenderTexture";
import { RenderableComponent } from "./RenderableComponent";
import { RichText } from "./RichText";
import { RigidBody } from "./RigidBody";
import { RigidBody2D } from "./RigidBody2D";
import { SafeArea } from "./SafeArea";
import { Scene } from "./Scene";
import { SceneAsset } from "./SceneAsset";
import { Script } from "./Script";
import { Scrollbar } from "./ScrollBar";
import { ScrollView } from "./ScrollView";
import { ShadowFlow } from "./ShadowFlow";
import { ShadowStage } from "./ShadowStage";
import { SimplexCollider } from "./SimplexCollider";
import { Skeleton } from "./Skeleton";
import { SkeletalAnimation } from "./SkeletalAnimation";
import { SkinnedMeshBatchRenderer } from "./SkinnedMeshBatchRenderer";
import { SkinnedMeshRenderer } from "./SkinnedMeshRenderer";
import { SkinnedMeshUnit } from "./SkinnedMeshUnit";
import { Slider } from "./Slider";
import { SliderJoint2D } from "./SliderJoint2D";
import { SphereCollider } from "./SphereCollider";
import { SphereLight } from "./SphereLight";
import { SpotLight } from "./SpotLight";
import { SpringJoint2D } from "./SpringJoint2D";
import { Sprite } from "./Sprite";
import { SpriteAtlas } from "./SpriteAtlas";
import { SpriteFrame } from "./SpriteFrame";
import { SubContextView } from "./SubContextView";
import { TTFFont } from "./TTFFont";
import { TextAsset } from "./TextAsset";
import { Texture2D } from "./Texture2D";
import { TextureCube } from "./TextureCube";
import { TiledLayer } from "./TiledLayer";
import { TiledMap } from "./TiledMap";
import { TiledMapAsset } from "./TiledMapAsset";
import { TiledObjectGroup } from "./TiledObjectGroup";
import { TiledTile } from "./TiledTile";
import { TiledUserNodeData } from "./TiledUserNodeData";
import { Toggle } from "./Toggle";
import { ToggleContainer } from "./ToggleContainer";
import { TypeScript } from "./TypeScript";
import { UIComponent } from "./UIComponent";
import { UICoordinateTracker } from "./UICoordinateTracker";
import { UIMeshRenderer } from "./UIMeshRenderer";
import { UIOpacity } from "./UIOpacity";
import { UIRenderable } from "./UIRenderable";
import { UIReorderComponent } from "./UIReorderComponent";
import { UIStaticBatch } from "./UIStaticBatch";
import { UITransform } from "./UITransform";
import { UniformCurveValueAdapter } from "./UniformCurveValueAdapter";
import { VideoClip } from "./VideoClip";
import { VideoPlayer } from "./VideoPlayer";
import { ViewGroup } from "./ViewGroup";
import { WebView } from "./WebView";
import { WheelJoint2D } from "./WheelJoint2D";
import { Widget } from "./Widget";
import { AnimationCurve } from "./AnimationCurve";
import { Keyframe } from "./Keyframe";
import { AlphaKey } from "./AlphaKey";
import { Gradient } from "./Gradient";
import { GradientRange } from "./GradientRange";
import { Burst } from "./Burst";
import { ShapeModule } from "./ShapeModule";
import { ColorOvertimeModule } from "./ColorOvertimeModule";
import { SizeOvertimeModule } from "./SizeOvertimeModule";
import { VelocityOvertimeModule } from "./VelocityOvertimeModule";
import { ForceOvertimeModule } from "./ForceOvertimeModule";
import { LimitVelocityOvertimeModule } from "./LimitVelocityOvertimeModule";
import { RotationOvertimeModule } from "./RotationOvertimeModule";
import { TextureAnimationModule } from "./TextureAnimationModule";
import { ColorKey } from "./ColorKey";
import { TrailModule } from "./TrailModule";
import { ImporterBase } from "../common/base";
import { Sp_Skeleton } from "./SpSkeleton";
import { StudioComponent } from "./StudioComponent";
import { StudioWidget } from "./StudioWidget";
import { getBlendFactor2DTo3D, getColor } from "../common/utlis";
const CCCLASS_LIST = {
'cc.Animation': Animation,
'cc.AnimationClip': AnimationClip,
'cc.AnimationCurve': AnimationCurve,
'cc.Asset': Asset,
'cc.AlphaKey': AlphaKey,
'cc.AudioClip': AudioClip,
'cc.AudioSource': AudioSource,
'cc.Burst': Burst,
'cc.Button': Button,
'cc.BaseNode': BaseNode,
'cc.Billboard': Billboard,
'cc.BitmapFont': BitmapFont,
'cc.BoxCollider2D': BoxCollider2D,
'cc.BlockInputEvents': BlockInputEvents,
'cc.BufferAsset': BufferAsset,
'cc.BoxCollider': BoxCollider,
'cc.ColorKey': ColorKey,
'cc.Camera': Camera,
'cc.Canvas': Canvas,
'cc.CapsuleCollider': CapsuleCollider,
'cc.CircleCollider2D': CircleCollider2D,
'cc.Collider': Collider,
'cc.Collider2D': Collider2D,
'cc.CompPrefabInfo': CompPrefabInfo,
'cc.CompactValueTypeArray': CompactValueTypeArray,
'cc.Component': Component,
'cc.ComponentModifier': ComponentModifier,
'cc.ConeCollider': ConeCollider,
'cc.ConstantForce': ConstantForce,
'cc.Constraint': Constraint,
'cc.CubicSplineNumberValue': CubicSplineNumberValue,
'cc.CubicSplineValueClass': CubicSplineValueClass,
'cc.CurveRange': CurveRange,
'cc.CurveValueAdapter': CurveValueAdapter,
'cc.CylinderCollider': CylinderCollider,
'cc.ColorOvertimeModule': ColorOvertimeModule,
'cc.DirectionalLight': DirectionalLight,
'cc.DistanceJoint2D': DistanceJoint2D,
'cc.EditBox': EditBox,
'cc.EffectAsset': EffectAsset,
'cc.EventHandler': EventHandler,
'cc.FixedJoint2D': FixedJoint2D,
'cc.Font': Font,
'cc.ForwardFlow': ForwardFlow,
'cc.ForwardPipeline': ForwardPipeline,
'cc.ForwardStage': ForwardStage,
'cc.ForceOvertimeModule': ForceOvertimeModule,
'cc.Graphics': Graphics,
'cc.Gradient': Gradient,
'cc.GradientRange': GradientRange,
'cc.HierachyModifier': HierachyModifier,
'cc.HingeConstraint': HingeConstraint,
'cc.HingeJoint2D': HingeJoint2D,
'cc.ImageAsset': ImageAsset,
'cc.JavaScript': JavaScript,
'cc.Joint2D': Joint2D,
'cc.JsonAsset': JsonAsset,
'cc.Keyframe': Keyframe,
'cc.Label': Label,
'cc.LabelAtlas': LabelAtlas,
'cc.LabelOutline': LabelOutline,
'cc.LabelShadow': LabelShadow,
'cc.Layout': Layout,
'cc.Light': Light,
'cc.Line': Line,
'cc.LimitVelocityOvertimeModule': LimitVelocityOvertimeModule,
'cc.Mask': Mask,
'cc.Material': Material,
'cc.Mesh': Mesh,
'cc.MeshCollider': MeshCollider,
'cc.MeshRenderer': MeshRenderer,
'cc.ModelLightmapSettings': ModelLightmapSettings,
'cc.MissingScript': MissingScript,
'cc.MotionStreak': MotionStreak,
'cc.MouseJoint2D': MouseJoint2D,
'cc.Node': Node,
'cc.PageView': PageView,
'cc.PageViewIndicator': PageViewIndicator,
'cc.ParticleAsset': ParticleAsset,
'cc.ParticleSystem': ParticleSystem,
'cc.ParticleSystem2D': ParticleSystem2D,
'cc.PhysicsMaterial': PhysicsMaterial,
'cc.PlaneCollider': PlaneCollider,
'cc.PointToPointConstraint': PointToPointConstraint,
'cc.PolygonCollider2D': PolygonCollider2D,
'cc.Prefab': Prefab,
'cc.PrefabInfo': PrefabInfo,
'cc.Primitive': Primitive,
'cc.PrivateNode': PrivateNode,
'cc.ProgressBar': ProgressBar,
'cc.RawAsset': RawAsset,
'cc.RenderFlow': RenderFlow,
'cc.RenderStage': RenderStage,
'cc.RichText': RichText,
'cc.RigidBody': RigidBody,
'cc.RigidBody2D': RigidBody2D,
'cc.RenderTexture': RenderTexture,
'cc.RenderPipeline': RenderPipeline,
'cc.RelativeJoint2D': RelativeJoint2D,
'cc.RenderableComponent': RenderableComponent,
'cc.RotationOvertimeModule': RotationOvertimeModule,
'cc.ShapeModule': ShapeModule,
'cc.SafeArea': SafeArea,
'cc.Scene': Scene,
'cc.SceneAsset': SceneAsset,
'cc.Script': Script,
'cc.Scrollbar': Scrollbar,
'cc.ScrollView': ScrollView,
'cc.ShadowFlow': ShadowFlow,
'cc.ShadowStage': ShadowStage,
'cc.SimplexCollider': SimplexCollider,
'cc.Skeleton': Skeleton,
'cc.SkeletalAnimation': SkeletalAnimation,
'cc.SkinnedMeshBatchRenderer': SkinnedMeshBatchRenderer,
'cc.SkinnedMeshRenderer': SkinnedMeshRenderer,
'cc.SkinnedMeshUnit': SkinnedMeshUnit,
'cc.Slider': Slider,
'cc.SliderJoint2D': SliderJoint2D,
'cc.SphereCollider': SphereCollider,
'cc.SphereLight': SphereLight,
'cc.SpotLight': SpotLight,
'cc.SpringJoint2D': SpringJoint2D,
'cc.Sprite': Sprite,
'cc.SpriteAtlas': SpriteAtlas,
'cc.SpriteFrame': SpriteFrame,
'cc.SubContextView': SubContextView,
'cc.SizeOvertimeModule': SizeOvertimeModule,
'cc.TTFFont': TTFFont,
'cc.TextAsset': TextAsset,
'cc.Texture2D': Texture2D,
'cc.TextureCube': TextureCube,
'cc.TiledLayer': TiledLayer,
'cc.TiledMap': TiledMap,
'cc.TiledMapAsset': TiledMapAsset,
'cc.TiledObjectGroup': TiledObjectGroup,
'cc.TiledTile': TiledTile,
'cc.TiledUserNodeData': TiledUserNodeData,
'cc.Toggle': Toggle,
'cc.ToggleContainer': ToggleContainer,
'cc.TypeScript': TypeScript,
'cc.TextureAnimationModule': TextureAnimationModule,
'cc.TrailModule': TrailModule,
'cc.UIComponent': UIComponent,
'cc.UICoordinateTracker': UICoordinateTracker,
'cc.UIMeshRenderer': UIMeshRenderer,
'cc.UIOpacity': UIOpacity,
'cc.UIRenderable': UIRenderable,
'cc.UIReorderComponent': UIReorderComponent,
'cc.UIStaticBatch': UIStaticBatch,
'cc.UITransform': UITransform,
'cc.UniformCurveValueAdapter': UniformCurveValueAdapter,
'cc.VideoClip': VideoClip,
'cc.VideoPlayer': VideoPlayer,
'cc.ViewGroup': ViewGroup,
'cc.VelocityOvertimeModule': VelocityOvertimeModule,
'cc.WebView': WebView,
'cc.WheelJoint2D': WheelJoint2D,
'cc.Widget': Widget,
'dragonBones.ArmatureDisplay': ArmatureDisplay,
'sp.Skeleton': Sp_Skeleton,
'cc.StudioComponent': StudioComponent,
'cc.StudioWidget': StudioWidget,
};
const RENAME_COMPONENT: any = {
'cc.BoxCollider3D': 'cc.BoxCollider',
'cc.BoxCollider': 'cc.BoxCollider2D',
'cc.PhysicsBoxCollider': 'cc.BoxCollider2D',
'cc.CircleCollider': 'cc.CircleCollider2D',
'cc.PhysicsCircleCollider': 'cc.CircleCollider2D',
'cc.Collider': 'cc.Collider2D',
'cc.PhysicsCollider': 'cc.Collider2D',
'cc.PhysicsChainCollider': 'cc.Collider2D',
'cc.Collider3D': 'cc.Collider',
'cc.DistanceJoint': 'cc.DistanceJoint2D',
'cc.ClickEvent': 'cc.EventHandler',
'cc.MouseJoint': 'cc.MouseJoint2D',
'cc.WheelJoint': 'cc.WheelJoint2D',
'cc.PolygonCollider': 'cc.PolygonCollider2D',
'cc.PhysicsPolygonCollider': 'cc.PolygonCollider2D',
'cc.ParticleSystem': 'cc.ParticleSystem2D',
'cc.ParticleSystem3D': 'cc.ParticleSystem',
'cc.Joint': 'cc.Joint2D',
'cc.RigidBody': 'cc.RigidBody2D',
'cc.RigidBody3D': 'cc.RigidBody',
'cc.SphereCollider3D': 'cc.SphereCollider',
'cc.RenderComponent': 'cc.UIRenderable',
'cc.SkeletonAnimation': 'cc.SkeletalAnimation',
'cc.StudioWidget': 'cc.Widget',
};
export class MigrateManager {
static logs: string[] = [];
static async migrate(index: number, json2D: any, json3D: any) {
const element2D = json2D[index];
let type = element2D.__type__ || element2D[0].__type__;// 粒子存的是数组
if (type === 'cc.Light') {
switch (element2D._type) {
case 0:
type = 'cc.DirectionalLight';
break;
case 1:
type = 'cc.PointLight';
break;
case 2:
type = 'cc.SpotLight';
break;
case 3:// 环境不支持,已导入到场景中,而且实现也不一样
break;
}
}
const renameTyep = RENAME_COMPONENT[type];
if (renameTyep) {
type = renameTyep;
}
// @ts-ignore
const CCClass = CCCLASS_LIST[type];
if (CCClass) {
return await CCClass.apply(index, json2D, json3D);
}
else {
if (type.startsWith('cc.')) {
if (!MigrateManager.logs.includes(type)) {
MigrateManager.logs.push(type);
}
// console.log('未适配类型:' + type + ' ' + index);
}
let source: any = {};
for (const key in element2D) {
let value = element2D[key];
if (value && value.__uuid__) {
value.__uuid__ = await ImporterBase.getUuid(value.__uuid__);
}
else if (key === '_srcBlendFactor' || key === '_dstBlendFactor') {
value = getBlendFactor2DTo3D(value);
if (!source._color) {
source._color = getColor(json2D[element2D.node.__id__]);
}
}
source[key] = value;
}
let content = JSON.stringify(source, undefined, 2);
const __uuids__ = content.match(/(?<=__uuid__": ")(.*)(?=")/g) || [];
for (let uuid of __uuids__) {
const oldUuid = uuid;
uuid = await ImporterBase.getUuid(uuid) as string;
content = content.replace(oldUuid, uuid);
}
source = JSON.parse(content);
json3D.splice(index, 1, source);
return source;
}
}
}