@aura3d/editor-runtime 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AnimationSceneEditor.d.ts +111 -0
- package/dist/AnimationSceneEditor.d.ts.map +1 -0
- package/dist/AnimationSceneEditor.js +285 -0
- package/dist/AnimationSceneEditor.js.map +1 -0
- package/dist/AssetDropZone.d.ts +9 -9
- package/dist/AssetDropZone.d.ts.map +1 -1
- package/dist/AssetDropZone.js +4 -4
- package/dist/AssetDropZone.js.map +1 -1
- package/dist/EventTrackEditor.d.ts +54 -0
- package/dist/EventTrackEditor.d.ts.map +1 -0
- package/dist/EventTrackEditor.js +124 -0
- package/dist/EventTrackEditor.js.map +1 -0
- package/dist/SceneOutliner.d.ts +3 -3
- package/dist/SceneOutliner.d.ts.map +1 -1
- package/dist/SceneOutliner.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
- package/src/{CartoonSceneEditor.ts → AnimationSceneEditor.ts} +68 -68
- package/src/AssetDropZone.ts +16 -16
- package/src/EventTrackEditor.ts +169 -0
- package/src/SceneOutliner.ts +4 -4
- package/src/index.ts +5 -3
- package/tests/editor-runtime.test.ts +5 -5
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Editor authoring controller for animation event tracks (T2.2). Lets a timeline UI add / move /
|
|
2
|
+
// delete typed markers on named lanes (hitbox active-frames, footsteps, VFX, generic markers) and
|
|
3
|
+
// serialize to the canonical `animation-event-tracks/v1` shape that `@aura3d/animation`'s
|
|
4
|
+
// `deserializeAnimationEventTracks` / `sampleClipEvents` consume — so authored tracks drive gameplay
|
|
5
|
+
// (hitbox windows) and playback (footstep/VFX triggers) deterministically.
|
|
6
|
+
//
|
|
7
|
+
// Type-only imports from `@aura3d/animation` keep this controller free of any runtime coupling to
|
|
8
|
+
// that package (the types are erased at build time); the serialized output is verified to round-trip
|
|
9
|
+
// through the animation package's deserializer in tests.
|
|
10
|
+
/**
|
|
11
|
+
* Timeline event-track authoring controller. Deterministic: marker ids come from a monotonic
|
|
12
|
+
* counter (no `Date.now`/`Math.random`), so undo/redo and serialization are reproducible.
|
|
13
|
+
*/
|
|
14
|
+
export class EventTrackEditor {
|
|
15
|
+
clipId;
|
|
16
|
+
duration;
|
|
17
|
+
order = [];
|
|
18
|
+
lanesMap = new Map();
|
|
19
|
+
selectedId;
|
|
20
|
+
idCounter = 0;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
if (!Number.isFinite(options.duration) || options.duration < 0) {
|
|
23
|
+
throw new Error("EventTrackEditor duration must be a finite, non-negative number.");
|
|
24
|
+
}
|
|
25
|
+
this.clipId = options.clipId;
|
|
26
|
+
this.duration = options.duration;
|
|
27
|
+
}
|
|
28
|
+
addTrack(name, type = "marker") {
|
|
29
|
+
if (!this.lanesMap.has(name)) {
|
|
30
|
+
this.lanesMap.set(name, { type, markers: [] });
|
|
31
|
+
this.order.push(name);
|
|
32
|
+
}
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
removeTrack(name) {
|
|
36
|
+
if (this.lanesMap.delete(name))
|
|
37
|
+
this.order.splice(this.order.indexOf(name), 1);
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
/** Add a marker to a lane (auto-creates the lane). Returns the new marker id. */
|
|
41
|
+
addMarker(trackName, time, options = {}) {
|
|
42
|
+
if (!Number.isFinite(time) || time < 0) {
|
|
43
|
+
throw new Error("Event marker time must be a finite, non-negative number.");
|
|
44
|
+
}
|
|
45
|
+
this.addTrack(trackName, options.type);
|
|
46
|
+
const lane = this.lanesMap.get(trackName);
|
|
47
|
+
const id = options.id ?? `${trackName}#${this.idCounter++}`;
|
|
48
|
+
lane.markers.push({
|
|
49
|
+
id,
|
|
50
|
+
name: trackName,
|
|
51
|
+
type: options.type ?? lane.type,
|
|
52
|
+
time,
|
|
53
|
+
...(options.duration !== undefined ? { duration: options.duration } : {}),
|
|
54
|
+
...(options.payload !== undefined ? { payload: options.payload } : {}),
|
|
55
|
+
...(options.tags !== undefined ? { tags: options.tags } : {})
|
|
56
|
+
});
|
|
57
|
+
lane.markers.sort((a, b) => a.time - b.time);
|
|
58
|
+
return id;
|
|
59
|
+
}
|
|
60
|
+
/** Move an existing marker to a new time. */
|
|
61
|
+
moveMarker(trackName, markerId, time) {
|
|
62
|
+
if (!Number.isFinite(time) || time < 0) {
|
|
63
|
+
throw new Error("Event marker time must be a finite, non-negative number.");
|
|
64
|
+
}
|
|
65
|
+
const lane = this.lanesMap.get(trackName);
|
|
66
|
+
const index = lane?.markers.findIndex((m) => m.id === markerId) ?? -1;
|
|
67
|
+
if (!lane || index < 0)
|
|
68
|
+
throw new Error(`Marker ${markerId} not found on track ${trackName}.`);
|
|
69
|
+
lane.markers[index] = { ...lane.markers[index], time };
|
|
70
|
+
lane.markers.sort((a, b) => a.time - b.time);
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
/** Delete a marker. */
|
|
74
|
+
removeMarker(trackName, markerId) {
|
|
75
|
+
const lane = this.lanesMap.get(trackName);
|
|
76
|
+
if (!lane)
|
|
77
|
+
return this;
|
|
78
|
+
const index = lane.markers.findIndex((m) => m.id === markerId);
|
|
79
|
+
if (index >= 0)
|
|
80
|
+
lane.markers.splice(index, 1);
|
|
81
|
+
if (this.selectedId === markerId)
|
|
82
|
+
this.selectedId = undefined;
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
select(markerId) {
|
|
86
|
+
this.selectedId = markerId;
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
markerCount() {
|
|
90
|
+
let count = 0;
|
|
91
|
+
for (const lane of this.lanesMap.values())
|
|
92
|
+
count += lane.markers.length;
|
|
93
|
+
return count;
|
|
94
|
+
}
|
|
95
|
+
/** View-model for the timeline UI: lanes with marker positions + selection state. */
|
|
96
|
+
lanes() {
|
|
97
|
+
return this.order.map((name) => {
|
|
98
|
+
const lane = this.lanesMap.get(name);
|
|
99
|
+
return {
|
|
100
|
+
name,
|
|
101
|
+
type: lane.type,
|
|
102
|
+
markers: lane.markers.map((m) => ({
|
|
103
|
+
id: m.id,
|
|
104
|
+
time: m.time,
|
|
105
|
+
...(m.duration !== undefined ? { duration: m.duration } : {}),
|
|
106
|
+
type: m.type ?? lane.type,
|
|
107
|
+
selected: m.id === this.selectedId
|
|
108
|
+
}))
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/** Serialize to the canonical `animation-event-tracks/v1` shape. */
|
|
113
|
+
serialize() {
|
|
114
|
+
const tracks = this.order.map((name) => {
|
|
115
|
+
const lane = this.lanesMap.get(name);
|
|
116
|
+
return { name, type: lane.type, markers: lane.markers.map((m) => ({ ...m })) };
|
|
117
|
+
});
|
|
118
|
+
return { schema: "animation-event-tracks/v1", clipId: this.clipId, duration: this.duration, tracks };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function createEventTrackEditor(options) {
|
|
122
|
+
return new EventTrackEditor(options);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=EventTrackEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventTrackEditor.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EventTrackEditor.ts"],"names":[],"mappings":"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"}
|
package/dist/SceneOutliner.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type HierarchyNodeDescriptor } from "./HierarchyModel";
|
|
2
2
|
import type { SelectionId } from "./Selection";
|
|
3
|
-
import type {
|
|
3
|
+
import type { AnimationSceneNode } from "./AnimationSceneEditor";
|
|
4
4
|
export interface SceneOutlinerItem extends HierarchyNodeDescriptor {
|
|
5
5
|
readonly icon: string;
|
|
6
6
|
readonly kind: string;
|
|
@@ -12,8 +12,8 @@ export interface SceneOutlinerOptions {
|
|
|
12
12
|
export declare class SceneOutliner {
|
|
13
13
|
private readonly hierarchy;
|
|
14
14
|
private disposers;
|
|
15
|
-
describe(root:
|
|
16
|
-
render(root:
|
|
15
|
+
describe(root: AnimationSceneNode, selectedIds?: ReadonlySet<SelectionId>): readonly SceneOutlinerItem[];
|
|
16
|
+
render(root: AnimationSceneNode, container: HTMLElement, options?: SceneOutlinerOptions): readonly SceneOutlinerItem[];
|
|
17
17
|
dispose(): void;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=SceneOutliner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneOutliner.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"SceneOutliner.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iBAAkB,SAAQ,uBAAuB;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,SAAS,CAAsB;IAEvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,WAAW,GAAE,WAAW,CAAC,WAAW,CAAa,GAAG,SAAS,iBAAiB,EAAE;IAYnH,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,oBAAyB,GAAG,SAAS,iBAAiB,EAAE;IAsB1H,OAAO,IAAI,IAAI;CAGhB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneOutliner.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,kBAAkB,CAAC;AAchF,MAAM,OAAO,aAAa;IACP,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IAC1C,SAAS,GAAmB,EAAE,CAAC;IAEvC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"SceneOutliner.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
export type { Command, CommandContext } from "./Command";
|
|
2
2
|
export { CommandHistory, CommandTransactionError } from "./CommandHistory";
|
|
3
3
|
export { AssetDropZone, readAssetFromDataTransfer, serializeAssetForDrag } from "./AssetDropZone";
|
|
4
|
-
export type { AssetDropPlacement, AssetDropResult, AssetDropZoneOptions,
|
|
4
|
+
export type { AssetDropPlacement, AssetDropResult, AssetDropZoneOptions, AnimationAssetCategory, AnimationEditorAssetReference } from "./AssetDropZone";
|
|
5
5
|
export { CameraPathEditor, createCameraPathEditor, readCameraPathKeyframes } from "./CameraPathEditor";
|
|
6
6
|
export type { EditorCameraPathEvidence, EditorCameraPathKeyframe, EditorCameraPathSample, EditorCameraVector3 } from "./CameraPathEditor";
|
|
7
|
-
export {
|
|
8
|
-
export type {
|
|
7
|
+
export { AnimationSceneEditor, createAnimationSceneNode } from "./AnimationSceneEditor";
|
|
8
|
+
export type { AnimationSceneEditorOptions, AnimationSceneEditorSnapshot, AnimationSceneEpisodeSnapshot, AnimationSceneEpisodeState, AnimationSceneNode, AnimationSceneTransform } from "./AnimationSceneEditor";
|
|
9
9
|
export { CurveEditor } from "./CurveEditor";
|
|
10
10
|
export type { TimelineCurveEvidence, TimelineCurvePoint, TimelineCurveSample } from "./CurveEditor";
|
|
11
11
|
export { DiagnosticsOverlayModel } from "./DiagnosticsOverlayModel";
|
|
12
12
|
export type { EditorDiagnosticsInput, EditorDiagnosticsResource, EditorDiagnosticsSnapshot } from "./DiagnosticsOverlayModel";
|
|
13
13
|
export { EditorRuntime } from "./EditorRuntime";
|
|
14
14
|
export type { EditorMode, EditorRuntimeSnapshot } from "./EditorRuntime";
|
|
15
|
+
export { EventTrackEditor, createEventTrackEditor } from "./EventTrackEditor";
|
|
16
|
+
export type { AddEventMarkerOptions, EventMarkerView, EventTrackEditorOptions, EventTrackLane } from "./EventTrackEditor";
|
|
15
17
|
export { EpisodeReviewPanel, createEpisodeReviewPanel } from "./EpisodeReviewPanel";
|
|
16
18
|
export type { EpisodeReviewManualVisemeEdit, EpisodeReviewNote, EpisodeReviewPanelSnapshot, EpisodeReviewPanelState, EpisodeReviewRejectedFrame, EpisodeReviewStatus, EpisodeReviewWaveformLane } from "./EpisodeReviewPanel";
|
|
17
19
|
export { EditorStateModel, createMemoryEditorStateStorage } from "./EditorStateModel";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { CommandHistory, CommandTransactionError } from "./CommandHistory.js";
|
|
2
2
|
export { AssetDropZone, readAssetFromDataTransfer, serializeAssetForDrag } from "./AssetDropZone.js";
|
|
3
3
|
export { CameraPathEditor, createCameraPathEditor, readCameraPathKeyframes } from "./CameraPathEditor.js";
|
|
4
|
-
export {
|
|
4
|
+
export { AnimationSceneEditor, createAnimationSceneNode } from "./AnimationSceneEditor.js";
|
|
5
5
|
export { CurveEditor } from "./CurveEditor.js";
|
|
6
6
|
export { DiagnosticsOverlayModel } from "./DiagnosticsOverlayModel.js";
|
|
7
7
|
export { EditorRuntime } from "./EditorRuntime.js";
|
|
8
|
+
export { EventTrackEditor, createEventTrackEditor } from "./EventTrackEditor.js";
|
|
8
9
|
export { EpisodeReviewPanel, createEpisodeReviewPanel } from "./EpisodeReviewPanel.js";
|
|
9
10
|
export { EditorStateModel, createMemoryEditorStateStorage } from "./EditorStateModel.js";
|
|
10
11
|
export { EditorPluginHost } from "./EditorPluginHost.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAEvG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/editor-runtime",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"main": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@aura3d/
|
|
15
|
-
"@aura3d/
|
|
14
|
+
"@aura3d/animation": "workspace:*",
|
|
15
|
+
"@aura3d/math": "workspace:*",
|
|
16
|
+
"@aura3d/scene": "workspace:*"
|
|
16
17
|
}
|
|
17
|
-
}
|
|
18
|
+
}
|
|
@@ -3,27 +3,27 @@ import { EditorRuntime } from "./EditorRuntime";
|
|
|
3
3
|
import type { EpisodeReviewPanelSnapshot } from "./EpisodeReviewPanel";
|
|
4
4
|
import type { HierarchyLikeNode } from "./HierarchyModel";
|
|
5
5
|
import type { RenderQueuePanelSnapshot } from "./RenderQueuePanel";
|
|
6
|
-
import { AssetDropZone, type AssetDropPlacement, type
|
|
6
|
+
import { AssetDropZone, type AssetDropPlacement, type AnimationAssetCategory, type AnimationEditorAssetReference } from "./AssetDropZone";
|
|
7
7
|
|
|
8
|
-
export interface
|
|
8
|
+
export interface AnimationSceneTransform {
|
|
9
9
|
position: { x: number; y: number; z: number };
|
|
10
10
|
rotation: { x: number; y: number; z: number; w: number };
|
|
11
11
|
scale: { x: number; y: number; z: number };
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export interface
|
|
14
|
+
export interface AnimationSceneNode extends HierarchyLikeNode {
|
|
15
15
|
readonly id: string;
|
|
16
16
|
name: string;
|
|
17
|
-
kind:
|
|
17
|
+
kind: AnimationAssetCategory;
|
|
18
18
|
visible: boolean;
|
|
19
|
-
asset?:
|
|
20
|
-
transform:
|
|
19
|
+
asset?: AnimationEditorAssetReference;
|
|
20
|
+
transform: AnimationSceneTransform;
|
|
21
21
|
animationClips: string[];
|
|
22
22
|
material?: string;
|
|
23
|
-
readonly children:
|
|
23
|
+
readonly children: AnimationSceneNode[];
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export interface
|
|
26
|
+
export interface AnimationSceneEditorSnapshot {
|
|
27
27
|
readonly nodeCount: number;
|
|
28
28
|
readonly selectedIds: readonly (string | number)[];
|
|
29
29
|
readonly placedAssetCount: number;
|
|
@@ -36,16 +36,16 @@ export interface CartoonSceneEditorSnapshot {
|
|
|
36
36
|
readonly sceneSaveLoad: true;
|
|
37
37
|
readonly episodeState: boolean;
|
|
38
38
|
};
|
|
39
|
-
readonly episode:
|
|
39
|
+
readonly episode: AnimationSceneEpisodeSnapshot;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export interface
|
|
42
|
+
export interface AnimationSceneEditorOptions {
|
|
43
43
|
readonly runtime?: EditorRuntime;
|
|
44
|
-
readonly root?:
|
|
45
|
-
readonly episode?: Partial<
|
|
44
|
+
readonly root?: AnimationSceneNode;
|
|
45
|
+
readonly episode?: Partial<AnimationSceneEpisodeState>;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
export interface
|
|
48
|
+
export interface AnimationSceneEpisodeState {
|
|
49
49
|
readonly shots: readonly string[];
|
|
50
50
|
readonly assets: readonly string[];
|
|
51
51
|
readonly captions: readonly string[];
|
|
@@ -54,7 +54,7 @@ export interface CartoonSceneEpisodeState {
|
|
|
54
54
|
readonly reviewState?: EpisodeReviewPanelSnapshot;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export interface
|
|
57
|
+
export interface AnimationSceneEpisodeSnapshot extends AnimationSceneEpisodeState {
|
|
58
58
|
readonly shotCount: number;
|
|
59
59
|
readonly assetCount: number;
|
|
60
60
|
readonly captionCount: number;
|
|
@@ -63,18 +63,18 @@ export interface CartoonSceneEpisodeSnapshot extends CartoonSceneEpisodeState {
|
|
|
63
63
|
readonly hasReviewState: boolean;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
export class
|
|
66
|
+
export class AnimationSceneEditor {
|
|
67
67
|
readonly runtime: EditorRuntime;
|
|
68
|
-
readonly root:
|
|
69
|
-
readonly dropZone: AssetDropZone<
|
|
68
|
+
readonly root: AnimationSceneNode;
|
|
69
|
+
readonly dropZone: AssetDropZone<AnimationSceneNode>;
|
|
70
70
|
private cameraPreviewIdInternal: string | null = null;
|
|
71
|
-
private episodeState:
|
|
71
|
+
private episodeState: AnimationSceneEpisodeState;
|
|
72
72
|
|
|
73
|
-
constructor(options:
|
|
73
|
+
constructor(options: AnimationSceneEditorOptions = {}) {
|
|
74
74
|
this.runtime = options.runtime ?? new EditorRuntime();
|
|
75
|
-
this.root = options.root ??
|
|
75
|
+
this.root = options.root ?? createAnimationSceneNode({ id: "scene-root", name: "Scene", kind: "set" });
|
|
76
76
|
this.episodeState = normalizeEpisodeState(options.episode ?? {});
|
|
77
|
-
this.dropZone = new AssetDropZone<
|
|
77
|
+
this.dropZone = new AssetDropZone<AnimationSceneNode>({
|
|
78
78
|
history: this.runtime.history,
|
|
79
79
|
createNode: (asset, placement) => this.createNodeFromAsset(asset, placement),
|
|
80
80
|
addNode: (node, placement) => this.addNode(node, placement.targetId),
|
|
@@ -82,34 +82,34 @@ export class CartoonSceneEditor {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
async placeAsset(asset:
|
|
85
|
+
async placeAsset(asset: AnimationEditorAssetReference, placement: AssetDropPlacement = {}): Promise<AnimationSceneNode> {
|
|
86
86
|
const result = await this.dropZone.dropAsset(asset, placement);
|
|
87
87
|
this.runtime.select([result.node.id]);
|
|
88
88
|
return result.node;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
async addEmptyNode(config: { readonly id?: string; readonly name: string; readonly kind?:
|
|
92
|
-
const node =
|
|
91
|
+
async addEmptyNode(config: { readonly id?: string; readonly name: string; readonly kind?: AnimationAssetCategory; readonly parentId?: string }): Promise<AnimationSceneNode> {
|
|
92
|
+
const node = createAnimationSceneNode({
|
|
93
93
|
id: config.id ?? stableNodeId(config.name),
|
|
94
94
|
name: config.name,
|
|
95
95
|
kind: config.kind ?? "prop"
|
|
96
96
|
});
|
|
97
|
-
await this.runtime.history.execute(new
|
|
97
|
+
await this.runtime.history.execute(new AddAnimationNodeCommand(this.root, node, config.parentId));
|
|
98
98
|
return node;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
async removeNode(id: string): Promise<void> {
|
|
102
|
-
if (id === this.root.id) throw new Error("Cannot remove the root
|
|
102
|
+
if (id === this.root.id) throw new Error("Cannot remove the root animation scene node.");
|
|
103
103
|
const parent = findParent(this.root, id);
|
|
104
104
|
const node = findNode(this.root, id);
|
|
105
|
-
if (!parent || !node) throw new Error(`
|
|
106
|
-
await this.runtime.history.execute(new
|
|
105
|
+
if (!parent || !node) throw new Error(`Animation scene node does not exist: ${id}`);
|
|
106
|
+
await this.runtime.history.execute(new RemoveAnimationNodeCommand(parent, node));
|
|
107
107
|
this.runtime.pruneSelection((selectionId) => selectionId !== id);
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
async setTransform(id: string, transform: Partial<
|
|
110
|
+
async setTransform(id: string, transform: Partial<AnimationSceneTransform>): Promise<void> {
|
|
111
111
|
const node = this.requireNode(id);
|
|
112
|
-
await this.runtime.history.execute(new
|
|
112
|
+
await this.runtime.history.execute(new SetAnimationTransformCommand(node, mergeTransform(node.transform, transform)));
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
selectNode(id: string): void {
|
|
@@ -125,16 +125,16 @@ export class CartoonSceneEditor {
|
|
|
125
125
|
this.cameraPreviewIdInternal = id;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
setEpisodeState(state: Partial<
|
|
128
|
+
setEpisodeState(state: Partial<AnimationSceneEpisodeState>): AnimationSceneEpisodeSnapshot {
|
|
129
129
|
this.episodeState = normalizeEpisodeState({ ...this.episodeState, ...state });
|
|
130
130
|
return this.episodeSnapshot();
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
serializeScene():
|
|
133
|
+
serializeScene(): AnimationSceneNode {
|
|
134
134
|
return cloneNode(this.root);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
loadScene(root:
|
|
137
|
+
loadScene(root: AnimationSceneNode): void {
|
|
138
138
|
this.root.children.splice(0, this.root.children.length, ...root.children.map(cloneNode));
|
|
139
139
|
this.root.name = root.name;
|
|
140
140
|
this.root.visible = root.visible;
|
|
@@ -151,7 +151,7 @@ export class CartoonSceneEditor {
|
|
|
151
151
|
return this.runtime.inspect(this.requireNode(String(selected)));
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
snapshot():
|
|
154
|
+
snapshot(): AnimationSceneEditorSnapshot {
|
|
155
155
|
const nodes = flattenNodes(this.root);
|
|
156
156
|
return {
|
|
157
157
|
nodeCount: nodes.length,
|
|
@@ -174,7 +174,7 @@ export class CartoonSceneEditor {
|
|
|
174
174
|
};
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
private episodeSnapshot():
|
|
177
|
+
private episodeSnapshot(): AnimationSceneEpisodeSnapshot {
|
|
178
178
|
return {
|
|
179
179
|
...this.episodeState,
|
|
180
180
|
shotCount: this.episodeState.shots.length,
|
|
@@ -186,8 +186,8 @@ export class CartoonSceneEditor {
|
|
|
186
186
|
};
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
private createNodeFromAsset(asset:
|
|
190
|
-
return
|
|
189
|
+
private createNodeFromAsset(asset: AnimationEditorAssetReference, placement: AssetDropPlacement): AnimationSceneNode {
|
|
190
|
+
return createAnimationSceneNode({
|
|
191
191
|
id: stableNodeId(asset.id),
|
|
192
192
|
name: asset.name,
|
|
193
193
|
kind: asset.category ?? categoryFromAsset(asset),
|
|
@@ -196,19 +196,19 @@ export class CartoonSceneEditor {
|
|
|
196
196
|
});
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
private addNode(node:
|
|
199
|
+
private addNode(node: AnimationSceneNode, parentId?: string | number): void {
|
|
200
200
|
const parent = parentId === undefined ? this.root : this.requireNode(String(parentId));
|
|
201
201
|
parent.children.push(node);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
-
private requireNode(id: string):
|
|
204
|
+
private requireNode(id: string): AnimationSceneNode {
|
|
205
205
|
const node = findNode(this.root, id);
|
|
206
|
-
if (!node) throw new Error(`
|
|
206
|
+
if (!node) throw new Error(`Animation scene node does not exist: ${id}`);
|
|
207
207
|
return node;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
function normalizeEpisodeState(state: Partial<
|
|
211
|
+
function normalizeEpisodeState(state: Partial<AnimationSceneEpisodeState>): AnimationSceneEpisodeState {
|
|
212
212
|
return {
|
|
213
213
|
shots: [...(state.shots ?? [])],
|
|
214
214
|
assets: [...(state.assets ?? [])],
|
|
@@ -219,17 +219,17 @@ function normalizeEpisodeState(state: Partial<CartoonSceneEpisodeState>): Cartoo
|
|
|
219
219
|
};
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
export function
|
|
222
|
+
export function createAnimationSceneNode(config: {
|
|
223
223
|
readonly id: string;
|
|
224
224
|
readonly name: string;
|
|
225
|
-
readonly kind:
|
|
226
|
-
readonly asset?:
|
|
227
|
-
readonly transform?:
|
|
225
|
+
readonly kind: AnimationAssetCategory;
|
|
226
|
+
readonly asset?: AnimationEditorAssetReference;
|
|
227
|
+
readonly transform?: AnimationSceneTransform;
|
|
228
228
|
readonly visible?: boolean;
|
|
229
229
|
readonly animationClips?: readonly string[];
|
|
230
230
|
readonly material?: string;
|
|
231
|
-
readonly children?: readonly
|
|
232
|
-
}):
|
|
231
|
+
readonly children?: readonly AnimationSceneNode[];
|
|
232
|
+
}): AnimationSceneNode {
|
|
233
233
|
return {
|
|
234
234
|
id: config.id,
|
|
235
235
|
name: config.name,
|
|
@@ -243,16 +243,16 @@ export function createCartoonSceneNode(config: {
|
|
|
243
243
|
};
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
-
class
|
|
246
|
+
class AddAnimationNodeCommand implements Command {
|
|
247
247
|
readonly name: string;
|
|
248
248
|
|
|
249
|
-
constructor(private readonly root:
|
|
250
|
-
this.name = `Add
|
|
249
|
+
constructor(private readonly root: AnimationSceneNode, private readonly node: AnimationSceneNode, private readonly parentId?: string) {
|
|
250
|
+
this.name = `Add animation node ${node.id}`;
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
execute(): void {
|
|
254
254
|
const parent = this.parentId ? findNode(this.root, this.parentId) : this.root;
|
|
255
|
-
if (!parent) throw new Error(`
|
|
255
|
+
if (!parent) throw new Error(`Animation scene parent does not exist: ${this.parentId}`);
|
|
256
256
|
if (!parent.children.includes(this.node)) parent.children.push(this.node);
|
|
257
257
|
}
|
|
258
258
|
|
|
@@ -262,12 +262,12 @@ class AddCartoonNodeCommand implements Command {
|
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
-
class
|
|
265
|
+
class RemoveAnimationNodeCommand implements Command {
|
|
266
266
|
readonly name: string;
|
|
267
267
|
private index = -1;
|
|
268
268
|
|
|
269
|
-
constructor(private readonly parent:
|
|
270
|
-
this.name = `Remove
|
|
269
|
+
constructor(private readonly parent: AnimationSceneNode, private readonly node: AnimationSceneNode) {
|
|
270
|
+
this.name = `Remove animation node ${node.id}`;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
execute(): void {
|
|
@@ -282,12 +282,12 @@ class RemoveCartoonNodeCommand implements Command {
|
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
class
|
|
285
|
+
class SetAnimationTransformCommand implements Command {
|
|
286
286
|
readonly name: string;
|
|
287
|
-
private readonly before:
|
|
287
|
+
private readonly before: AnimationSceneTransform;
|
|
288
288
|
|
|
289
|
-
constructor(private readonly node:
|
|
290
|
-
this.name = `Set
|
|
289
|
+
constructor(private readonly node: AnimationSceneNode, private readonly after: AnimationSceneTransform) {
|
|
290
|
+
this.name = `Set animation transform ${node.id}`;
|
|
291
291
|
this.before = cloneTransform(node.transform);
|
|
292
292
|
}
|
|
293
293
|
|
|
@@ -300,14 +300,14 @@ class SetCartoonTransformCommand implements Command {
|
|
|
300
300
|
}
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
function categoryFromAsset(asset:
|
|
303
|
+
function categoryFromAsset(asset: AnimationEditorAssetReference): AnimationAssetCategory {
|
|
304
304
|
if (asset.type === "audio") return "audio";
|
|
305
305
|
if (asset.type === "material") return "material";
|
|
306
306
|
if (asset.clips && asset.clips.length > 0) return "character";
|
|
307
307
|
return "prop";
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
function findNode(root:
|
|
310
|
+
function findNode(root: AnimationSceneNode, id: string): AnimationSceneNode | undefined {
|
|
311
311
|
if (root.id === id) return root;
|
|
312
312
|
for (const child of root.children) {
|
|
313
313
|
const found = findNode(child, id);
|
|
@@ -316,7 +316,7 @@ function findNode(root: CartoonSceneNode, id: string): CartoonSceneNode | undefi
|
|
|
316
316
|
return undefined;
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
function findParent(root:
|
|
319
|
+
function findParent(root: AnimationSceneNode, id: string): AnimationSceneNode | undefined {
|
|
320
320
|
for (const child of root.children) {
|
|
321
321
|
if (child.id === id) return root;
|
|
322
322
|
const found = findParent(child, id);
|
|
@@ -325,16 +325,16 @@ function findParent(root: CartoonSceneNode, id: string): CartoonSceneNode | unde
|
|
|
325
325
|
return undefined;
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
-
function flattenNodes(root:
|
|
328
|
+
function flattenNodes(root: AnimationSceneNode): readonly AnimationSceneNode[] {
|
|
329
329
|
return [root, ...root.children.flatMap((child) => flattenNodes(child))];
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
function removeChild(parent:
|
|
332
|
+
function removeChild(parent: AnimationSceneNode, node: AnimationSceneNode): void {
|
|
333
333
|
const index = parent.children.indexOf(node);
|
|
334
334
|
if (index >= 0) parent.children.splice(index, 1);
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
-
function defaultTransform():
|
|
337
|
+
function defaultTransform(): AnimationSceneTransform {
|
|
338
338
|
return {
|
|
339
339
|
position: { x: 0, y: 0, z: 0 },
|
|
340
340
|
rotation: { x: 0, y: 0, z: 0, w: 1 },
|
|
@@ -342,7 +342,7 @@ function defaultTransform(): CartoonSceneTransform {
|
|
|
342
342
|
};
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
function mergeTransform(base:
|
|
345
|
+
function mergeTransform(base: AnimationSceneTransform, next: Partial<AnimationSceneTransform> | AssetDropPlacement): AnimationSceneTransform {
|
|
346
346
|
return {
|
|
347
347
|
position: { ...base.position, ...(next.position ?? {}) },
|
|
348
348
|
rotation: { ...base.rotation, ...(next.rotation ?? {}) },
|
|
@@ -350,12 +350,12 @@ function mergeTransform(base: CartoonSceneTransform, next: Partial<CartoonSceneT
|
|
|
350
350
|
};
|
|
351
351
|
}
|
|
352
352
|
|
|
353
|
-
function cloneTransform(transform:
|
|
353
|
+
function cloneTransform(transform: AnimationSceneTransform): AnimationSceneTransform {
|
|
354
354
|
return mergeTransform(defaultTransform(), transform);
|
|
355
355
|
}
|
|
356
356
|
|
|
357
|
-
function cloneNode(node:
|
|
358
|
-
return
|
|
357
|
+
function cloneNode(node: AnimationSceneNode): AnimationSceneNode {
|
|
358
|
+
return createAnimationSceneNode({
|
|
359
359
|
...node,
|
|
360
360
|
transform: cloneTransform(node.transform),
|
|
361
361
|
animationClips: [...node.animationClips],
|