From f08a8c6a6bf897aaf9e4078866d8aedd401b7dbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=82=E5=AE=89?= <151805118+wumaolinmaoan@users.noreply.github.com> Date: Thu, 23 May 2024 13:57:31 +0800 Subject: [PATCH] feat: add timeline asset data def (#59) * feat: add timeline asset data def * perf: opt code --- src/components.ts | 7 +++ src/composition.ts | 23 ++++++- src/index.ts | 1 + src/item/null-item.ts | 62 +------------------ src/timeline/index.ts | 5 ++ .../sprite-color-playable-asset-data.ts | 8 +++ src/timeline/timeline-asset-data.ts | 8 +++ src/timeline/timeline-clip-data.ts | 10 +++ src/timeline/track/track-asset-data.ts | 10 +++ ...transform-animation-playable-asset-data.ts | 17 +++++ 10 files changed, 89 insertions(+), 62 deletions(-) create mode 100644 src/timeline/index.ts create mode 100644 src/timeline/sprite-color-playable-asset-data.ts create mode 100644 src/timeline/timeline-asset-data.ts create mode 100644 src/timeline/timeline-clip-data.ts create mode 100644 src/timeline/track/track-asset-data.ts create mode 100644 src/timeline/transform-animation-playable-asset-data.ts diff --git a/src/components.ts b/src/components.ts index 7d5e42e..ccdf1d2 100644 --- a/src/components.ts +++ b/src/components.ts @@ -13,6 +13,10 @@ export enum DataType { Texture = 'Texture', AnimationClip = 'AnimationClip', TextComponent = 'TextComponent', + TrackAsset = 'TrackAsset', + TimelineAsset = 'TimelineAsset', + TransformAnimationPlayableAsset = 'TransformAnimationPlayableAsset', + SpriteColorPlayableAsset = 'SpriteColorPlayableAsset', // FIXME: 先完成ECS的场景转换,后面移到spec中 MeshComponent = 'MeshComponent', @@ -22,6 +26,9 @@ export enum DataType { ModelPluginComponent = 'ModelPluginComponent', TreeComponent = 'TreeComponent', AnimationComponent = 'AnimationComponent', + + // Non-EffectObject + TimelineClip = 'TimelineClip', } export interface DataPath { diff --git a/src/composition.ts b/src/composition.ts index 0212e82..c1022a7 100644 --- a/src/composition.ts +++ b/src/composition.ts @@ -1,4 +1,4 @@ -import type { Item } from './item'; +import type { DataPath } from './components'; import { CAMERA_CLIP_MODE_NORMAL, CAMERA_CLIP_MODE_VERTICAL, @@ -9,7 +9,7 @@ import { END_BEHAVIOR_PAUSE_AND_DESTROY, END_BEHAVIOR_RESTART, } from './constants'; -import type { DataPath } from './components'; +import type { Item } from './item'; export enum CameraClipMode { /** @@ -174,4 +174,23 @@ export interface CompositionData { * 降级图 */ fallbackImage?: string, + /** + * 时间轴资产(TimelineAssetData) + */ + timelineAsset: DataPath, + /** + * 轨道的场景绑定 + */ + sceneBindings: SceneBindingData[], +} + +export interface SceneBindingData { + /** + * 绑定的轨道资产(TrackAssetData) + */ + key: DataPath, + /** + * 被绑定的场景对象(VFXItemData) + */ + value: DataPath, } \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 55d29e8..99c185e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,3 +25,4 @@ export * from './text'; export * from './components'; export * from './vfx-item-data'; export * from './buitin-object-guid'; +export * from './timeline'; diff --git a/src/item/null-item.ts b/src/item/null-item.ts index 2285337..5b465ac 100644 --- a/src/item/null-item.ts +++ b/src/item/null-item.ts @@ -1,9 +1,6 @@ -import type { - SizeOverLifetime, RotationOverLifetime, PositionOverLifetime, ColorOverLifetime, ItemType, -} from '../type'; import type { RGBAColorValue } from '../number-expression'; +import type { ColorOverLifetime, ItemType, PositionOverLifetime, RotationOverLifetime, SizeOverLifetime } from '../type'; import type { BaseItem } from './base-item'; -import type { ComponentData, DataPath, EffectsObjectData } from '../components'; /** * 空节点元素 */ @@ -47,59 +44,4 @@ export interface NullContent { * 空节点元素色彩变化属性 */ colorOverLifetime?: ColorOverLifetime, -} - -export interface TimelineComponentData extends ComponentData { - /** - * 轨道数据 - */ - tracks: TrackAssetData[], -} - -export interface PlayableAssetData { - dataType: string, -} - -export interface TrackAssetData extends PlayableAssetData { - clips: TimelineClipData[], -} - -export interface TimelineClipData { - start: number, - duration: number, - clipAsset: DataPath, // PlayableData -} - -export interface TransformAnimationPlayableAssetData extends PlayableAssetData { - animationClip: DataPath, // TransformAnimationClipData -} - -export interface SpriteColorAnimationPlayableAssetData extends PlayableAssetData { - animationClip: DataPath, // SpriteColorAnimationClipData -} - -export interface TransformAnimationClipData extends EffectsObjectData { - /** - * 空节点元素大小变化属性 - */ - sizeOverLifetime?: SizeOverLifetime, - /** - * 空节点元素旋转变化属性 - */ - rotationOverLifetime?: RotationOverLifetime, - /** - * 空节点元素位置变化属性 - */ - positionOverLifetime?: PositionOverLifetime, -} - -export interface SpriteColorAnimationClipData extends EffectsObjectData { - /** - * 空节点元素色彩变化属性 - */ - colorOverLifetime?: ColorOverLifetime, - /** - * 图层初始颜色 - */ - startColor?: RGBAColorValue, -} +} \ No newline at end of file diff --git a/src/timeline/index.ts b/src/timeline/index.ts new file mode 100644 index 0000000..c9fbd96 --- /dev/null +++ b/src/timeline/index.ts @@ -0,0 +1,5 @@ +export * from './track/track-asset-data'; +export * from './sprite-color-playable-asset-data'; +export * from './timeline-asset-data'; +export * from './timeline-clip-data'; +export * from './transform-animation-playable-asset-data'; \ No newline at end of file diff --git a/src/timeline/sprite-color-playable-asset-data.ts b/src/timeline/sprite-color-playable-asset-data.ts new file mode 100644 index 0000000..9154eb3 --- /dev/null +++ b/src/timeline/sprite-color-playable-asset-data.ts @@ -0,0 +1,8 @@ +import type { EffectsObjectData } from '../components'; +import type { RGBAColorValue } from '../number-expression'; +import type { ColorOverLifetime } from '../type'; + +export interface SpriteColorPlayableAssetData extends EffectsObjectData { + colorOverLifetime?: ColorOverLifetime, + startColor?: RGBAColorValue, +} \ No newline at end of file diff --git a/src/timeline/timeline-asset-data.ts b/src/timeline/timeline-asset-data.ts new file mode 100644 index 0000000..71439a7 --- /dev/null +++ b/src/timeline/timeline-asset-data.ts @@ -0,0 +1,8 @@ +import type { EffectsObjectData, DataPath } from '../components'; + +export interface TimelineAssetData extends EffectsObjectData { + /** + * 轨道数据(TrackAssetData) + */ + tracks: DataPath[], +} \ No newline at end of file diff --git a/src/timeline/timeline-clip-data.ts b/src/timeline/timeline-clip-data.ts new file mode 100644 index 0000000..a8606b1 --- /dev/null +++ b/src/timeline/timeline-clip-data.ts @@ -0,0 +1,10 @@ +import type { DataPath } from '../components'; + +export interface TimelineClipData { + start?: number, + duration?: number, + /** + * 可播放资产(PlayableAssetData) + */ + asset: DataPath, +} \ No newline at end of file diff --git a/src/timeline/track/track-asset-data.ts b/src/timeline/track/track-asset-data.ts new file mode 100644 index 0000000..bc8d789 --- /dev/null +++ b/src/timeline/track/track-asset-data.ts @@ -0,0 +1,10 @@ +import type { DataPath, EffectsObjectData } from '../../components'; +import type { TimelineClipData } from '../timeline-clip-data'; + +export interface TrackAssetData extends EffectsObjectData { + /** + * 子轨道数据(TrackAssetData) + */ + children: DataPath[], + clips: TimelineClipData, +} \ No newline at end of file diff --git a/src/timeline/transform-animation-playable-asset-data.ts b/src/timeline/transform-animation-playable-asset-data.ts new file mode 100644 index 0000000..f3c3f23 --- /dev/null +++ b/src/timeline/transform-animation-playable-asset-data.ts @@ -0,0 +1,17 @@ +import type { EffectsObjectData } from '../components'; +import type { SizeOverLifetime, RotationOverLifetime, PositionOverLifetime } from '../type'; + +export interface TransformAnimationPlayableAssetData extends EffectsObjectData { + /** + * 元素大小变化属性 + */ + sizeOverLifetime?: SizeOverLifetime, + /** + * 元素旋转变化属性 + */ + rotationOverLifetime?: RotationOverLifetime, + /** + * 元素位置变化属性 + */ + positionOverLifetime?: PositionOverLifetime, +} \ No newline at end of file