@flighthq/timeline 0.3.0-next.1220.6982c21 → 0.3.0-next.1248.f867198
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/timeline.d.ts +4 -1
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +20 -5
- package/dist/timeline.js.map +1 -1
- package/package.json +3 -3
- package/src/timeline.test.ts +77 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { addTimelineFrameScript, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
|
|
1
|
+
export { addTimelineFrameScript, clearTimelineFrameScripts, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, getTimelineFrameScriptFrames, getTimelineLabels, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { addTimelineFrameScript, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
|
|
1
|
+
export { addTimelineFrameScript, clearTimelineFrameScripts, createTimeline, createTimelineSource, disposeTimelineSignals, enableTimelineSignals, findTimelineLabel, getTimelineCurrentLabel, getTimelineFrameScript, getTimelineFrameScriptFrames, getTimelineLabels, gotoAndPlayTimeline, gotoAndStopTimeline, nextFrameTimeline, playTimeline, prevFrameTimeline, removeTimelineFrameScript, stopTimeline, updateTimeline, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC"}
|
package/dist/timeline.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Node2D, FrameScript, Timeline, TimelineLabel, TimelineSignals, TimelineSource } from '@flighthq/types/contract';
|
|
2
2
|
export declare function addTimelineFrameScript(timeline: Timeline, frame: number | string, script: FrameScript): void;
|
|
3
|
+
export declare function clearTimelineFrameScripts(timeline: Timeline): void;
|
|
3
4
|
export declare function createTimeline(obj?: Partial<Timeline>): Timeline;
|
|
4
5
|
export declare function createTimelineSource(obj: {
|
|
5
6
|
totalFrames?: number;
|
|
@@ -12,6 +13,8 @@ export declare function enableTimelineSignals(timeline: Timeline): TimelineSigna
|
|
|
12
13
|
export declare function findTimelineLabel(timeline: Readonly<Timeline>, name: string): TimelineLabel | null;
|
|
13
14
|
export declare function getTimelineCurrentLabel(timeline: Readonly<Timeline>): TimelineLabel | null;
|
|
14
15
|
export declare function getTimelineFrameScript(timeline: Readonly<Timeline>, frame: number | string): FrameScript | null;
|
|
16
|
+
export declare function getTimelineFrameScriptFrames(timeline: Readonly<Timeline>): readonly number[];
|
|
17
|
+
export declare function getTimelineLabels(timeline: Readonly<Timeline>): readonly TimelineLabel[];
|
|
15
18
|
export declare function gotoAndPlayTimeline(timeline: Timeline, frame: number | string): void;
|
|
16
19
|
export declare function gotoAndStopTimeline(timeline: Timeline, frame: number | string): void;
|
|
17
20
|
export declare function nextFrameTimeline(timeline: Timeline): void;
|
|
@@ -19,5 +22,5 @@ export declare function playTimeline(timeline: Timeline): void;
|
|
|
19
22
|
export declare function prevFrameTimeline(timeline: Timeline): void;
|
|
20
23
|
export declare function removeTimelineFrameScript(timeline: Timeline, frame: number | string): void;
|
|
21
24
|
export declare function stopTimeline(timeline: Timeline): void;
|
|
22
|
-
export declare function updateTimeline(timeline: Timeline, deltaTime: number):
|
|
25
|
+
export declare function updateTimeline(timeline: Timeline, deltaTime: number): boolean;
|
|
23
26
|
//# sourceMappingURL=timeline.d.ts.map
|
package/dist/timeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,QAAQ,EAER,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG5G;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAYhE;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D,GAAG,cAAc,CAOjB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAID,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAElG;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAI/G;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAErD;
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,QAAQ,EAER,aAAa,EACb,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAG5G;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAElE;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAYhE;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D,GAAG,cAAc,CAOjB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAE/D;AAID,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAEzE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAElG;AAID,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,aAAa,GAAG,IAAI,CAU1F;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,IAAI,CAI/G;AAID,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,MAAM,EAAE,CAE5F;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,aAAa,EAAE,CAExF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIrD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAG1D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK1F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAErD;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAU7E"}
|
package/dist/timeline.js
CHANGED
|
@@ -3,6 +3,9 @@ export function addTimelineFrameScript(timeline, frame, script) {
|
|
|
3
3
|
const resolved = resolveFrame(timeline, frame);
|
|
4
4
|
(timeline.frameScripts ??= new Map()).set(resolved, script);
|
|
5
5
|
}
|
|
6
|
+
export function clearTimelineFrameScripts(timeline) {
|
|
7
|
+
timeline.frameScripts = null;
|
|
8
|
+
}
|
|
6
9
|
export function createTimeline(obj) {
|
|
7
10
|
return {
|
|
8
11
|
source: obj?.source ?? null,
|
|
@@ -59,6 +62,14 @@ export function getTimelineFrameScript(timeline, frame) {
|
|
|
59
62
|
const resolved = resolveFrame(timeline, frame);
|
|
60
63
|
return timeline.frameScripts.get(resolved) ?? null;
|
|
61
64
|
}
|
|
65
|
+
// Lists authored script frames in their insertion order. Returns a shared empty-array sentinel when
|
|
66
|
+
// none are attached; the returned non-empty array is a snapshot and cannot mutate the timeline's Map.
|
|
67
|
+
export function getTimelineFrameScriptFrames(timeline) {
|
|
68
|
+
return timeline.frameScripts === null ? EMPTY_FRAMES : [...timeline.frameScripts.keys()];
|
|
69
|
+
}
|
|
70
|
+
export function getTimelineLabels(timeline) {
|
|
71
|
+
return timeline.source?.labels ?? EMPTY_LABELS;
|
|
72
|
+
}
|
|
62
73
|
export function gotoAndPlayTimeline(timeline, frame) {
|
|
63
74
|
playTimeline(timeline);
|
|
64
75
|
seekTimeline(timeline, resolveFrame(timeline, frame));
|
|
@@ -92,16 +103,22 @@ export function removeTimelineFrameScript(timeline, frame) {
|
|
|
92
103
|
export function stopTimeline(timeline) {
|
|
93
104
|
timeline.isPlaying = false;
|
|
94
105
|
}
|
|
106
|
+
// Returns whether this call realized a new frame (constructFrame/scripts/signals), not merely whether
|
|
107
|
+
// the numeric playhead was advanced. Timed sources advance before realization, so currentFrame is the
|
|
108
|
+
// realized frame on return. A frameRate-null source realizes currentFrame first and then advances its
|
|
109
|
+
// playhead for the next call, so currentFrame reads one ahead of lastFrameUpdate between updates.
|
|
95
110
|
export function updateTimeline(timeline, deltaTime) {
|
|
96
111
|
const frameRate = getTimelineFrameRate(timeline);
|
|
97
112
|
if (timeline.isPlaying && frameRate !== null) {
|
|
98
113
|
timeline.currentFrame = advanceFrame(timeline, deltaTime);
|
|
99
114
|
}
|
|
100
|
-
fireConstructFrame(timeline);
|
|
115
|
+
const changed = fireConstructFrame(timeline);
|
|
101
116
|
if (timeline.isPlaying && frameRate === null) {
|
|
102
117
|
timeline.currentFrame = advanceFrame(timeline, deltaTime);
|
|
103
118
|
}
|
|
119
|
+
return changed;
|
|
104
120
|
}
|
|
121
|
+
const EMPTY_FRAMES = [];
|
|
105
122
|
const EMPTY_LABELS = [];
|
|
106
123
|
function noopConstructFrame() { }
|
|
107
124
|
// Frame accounting matches Flash/OpenFL: when accumulated time spans multiple frames in one update,
|
|
@@ -167,7 +184,7 @@ function fireConstructFrame(timeline) {
|
|
|
167
184
|
const previous = timeline.lastFrameUpdate;
|
|
168
185
|
const current = timeline.currentFrame;
|
|
169
186
|
if (current === previous)
|
|
170
|
-
return;
|
|
187
|
+
return false;
|
|
171
188
|
const signals = timeline.signals;
|
|
172
189
|
const target = timeline.target;
|
|
173
190
|
const frameEvent = { frame: current, previousFrame: previous };
|
|
@@ -185,13 +202,11 @@ function fireConstructFrame(timeline) {
|
|
|
185
202
|
}
|
|
186
203
|
if (signals !== null)
|
|
187
204
|
emitSignal(signals.onFrameConstructed, frameEvent);
|
|
205
|
+
return true;
|
|
188
206
|
}
|
|
189
207
|
function getTimelineFrameRate(timeline) {
|
|
190
208
|
return timeline.source?.frameRate ?? null;
|
|
191
209
|
}
|
|
192
|
-
function getTimelineLabels(timeline) {
|
|
193
|
-
return timeline.source?.labels ?? EMPTY_LABELS;
|
|
194
|
-
}
|
|
195
210
|
function getTimelineTotalFrames(timeline) {
|
|
196
211
|
return timeline.source?.totalFrames ?? 1;
|
|
197
212
|
}
|
package/dist/timeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/timeline",
|
|
3
|
-
"version": "0.3.0-next.
|
|
3
|
+
"version": "0.3.0-next.1248.f867198",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@flighthq/signals": "0.3.0-next.
|
|
40
|
-
"@flighthq/types": "0.3.0-next.
|
|
39
|
+
"@flighthq/signals": "0.3.0-next.1248.f867198",
|
|
40
|
+
"@flighthq/types": "0.3.0-next.1248.f867198"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"typescript": "^5.3.0"
|
package/src/timeline.test.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Node2D, Timeline } from '@flighthq/types/contract';
|
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
addTimelineFrameScript,
|
|
5
|
+
clearTimelineFrameScripts,
|
|
5
6
|
createTimeline,
|
|
6
7
|
createTimelineSource,
|
|
7
8
|
disposeTimelineSignals,
|
|
@@ -9,6 +10,8 @@ import {
|
|
|
9
10
|
findTimelineLabel,
|
|
10
11
|
getTimelineCurrentLabel,
|
|
11
12
|
getTimelineFrameScript,
|
|
13
|
+
getTimelineFrameScriptFrames,
|
|
14
|
+
getTimelineLabels,
|
|
12
15
|
gotoAndPlayTimeline,
|
|
13
16
|
gotoAndStopTimeline,
|
|
14
17
|
nextFrameTimeline,
|
|
@@ -77,6 +80,25 @@ describe('addTimelineFrameScript', () => {
|
|
|
77
80
|
});
|
|
78
81
|
});
|
|
79
82
|
|
|
83
|
+
describe('clearTimelineFrameScripts', () => {
|
|
84
|
+
it('is an idempotent no-op when no scripts are attached', () => {
|
|
85
|
+
const t = make();
|
|
86
|
+
clearTimelineFrameScripts(t);
|
|
87
|
+
expect(t.frameScripts).toBeNull();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('clears every attached script and restores the null storage sentinel', () => {
|
|
91
|
+
const t = make();
|
|
92
|
+
addTimelineFrameScript(t, 1, () => {});
|
|
93
|
+
addTimelineFrameScript(t, 3, () => {});
|
|
94
|
+
clearTimelineFrameScripts(t);
|
|
95
|
+
expect(t.frameScripts).toBeNull();
|
|
96
|
+
expect(getTimelineFrameScriptFrames(t)).toEqual([]);
|
|
97
|
+
expect(getTimelineFrameScript(t, 1)).toBeNull();
|
|
98
|
+
expect(getTimelineFrameScript(t, 3)).toBeNull();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
80
102
|
describe('createTimeline', () => {
|
|
81
103
|
it('starts at frame 1, stopped, lastFrameUpdate -1', () => {
|
|
82
104
|
const t = make();
|
|
@@ -300,6 +322,37 @@ describe('getTimelineFrameScript', () => {
|
|
|
300
322
|
});
|
|
301
323
|
});
|
|
302
324
|
|
|
325
|
+
describe('getTimelineFrameScriptFrames', () => {
|
|
326
|
+
it('returns an empty-array sentinel when no scripts are attached', () => {
|
|
327
|
+
expect(getTimelineFrameScriptFrames(make())).toEqual([]);
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
it('returns a snapshot of authored frames in insertion order', () => {
|
|
331
|
+
const t = make();
|
|
332
|
+
addTimelineFrameScript(t, 3, () => {});
|
|
333
|
+
addTimelineFrameScript(t, 1, () => {});
|
|
334
|
+
const frames = getTimelineFrameScriptFrames(t) as number[];
|
|
335
|
+
expect(frames).toEqual([3, 1]);
|
|
336
|
+
frames.push(2);
|
|
337
|
+
expect(getTimelineFrameScriptFrames(t)).toEqual([3, 1]);
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
describe('getTimelineLabels', () => {
|
|
342
|
+
it('returns an empty-array sentinel when the timeline has no labels', () => {
|
|
343
|
+
expect(getTimelineLabels(createTimeline())).toEqual([]);
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
it('returns the source label list as a read-only view', () => {
|
|
347
|
+
const labels = [
|
|
348
|
+
{ name: 'idle', frame: 1 },
|
|
349
|
+
{ name: 'run', frame: 3 },
|
|
350
|
+
];
|
|
351
|
+
const t = make({ labels });
|
|
352
|
+
expect(getTimelineLabels(t)).toBe(labels);
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
|
|
303
356
|
describe('gotoAndPlayTimeline', () => {
|
|
304
357
|
it('seeks to frame and starts playing', () => {
|
|
305
358
|
const t = make();
|
|
@@ -438,18 +491,39 @@ describe('updateTimeline', () => {
|
|
|
438
491
|
it('fires constructFrame for frame 1 on first update even when stopped', () => {
|
|
439
492
|
const frames: number[] = [];
|
|
440
493
|
const t = make({ constructFrame: (f) => frames.push(f) });
|
|
441
|
-
updateTimeline(t, 0);
|
|
494
|
+
expect(updateTimeline(t, 0)).toBe(true);
|
|
442
495
|
expect(frames).toEqual([1]);
|
|
443
496
|
});
|
|
444
497
|
|
|
445
498
|
it('does not double-fire constructFrame on repeated stopped updates', () => {
|
|
446
499
|
const frames: number[] = [];
|
|
447
500
|
const t = make({ constructFrame: (f) => frames.push(f) });
|
|
448
|
-
updateTimeline(t, 0);
|
|
449
|
-
updateTimeline(t, 0);
|
|
501
|
+
expect(updateTimeline(t, 0)).toBe(true);
|
|
502
|
+
expect(updateTimeline(t, 0)).toBe(false);
|
|
450
503
|
expect(frames).toEqual([1]);
|
|
451
504
|
});
|
|
452
505
|
|
|
506
|
+
it('returns false when a timed update accumulates time without realizing another frame', () => {
|
|
507
|
+
const t = make({ frameRate: 10 }); // 100ms/frame
|
|
508
|
+
playTimeline(t);
|
|
509
|
+
expect(updateTimeline(t, 0)).toBe(true); // realizes the initial frame
|
|
510
|
+
expect(updateTimeline(t, 50)).toBe(false);
|
|
511
|
+
expect(updateTimeline(t, 50)).toBe(true);
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
it('reports the realized frame before frameRate-null advances its next-call playhead', () => {
|
|
515
|
+
const frames: number[] = [];
|
|
516
|
+
const t = make({ frameRate: null, constructFrame: (f) => frames.push(f) });
|
|
517
|
+
playTimeline(t);
|
|
518
|
+
expect(updateTimeline(t, 0)).toBe(true);
|
|
519
|
+
expect(t.lastFrameUpdate).toBe(1);
|
|
520
|
+
expect(t.currentFrame).toBe(2);
|
|
521
|
+
expect(updateTimeline(t, 0)).toBe(true);
|
|
522
|
+
expect(t.lastFrameUpdate).toBe(2);
|
|
523
|
+
expect(t.currentFrame).toBe(3);
|
|
524
|
+
expect(frames).toEqual([1, 2]);
|
|
525
|
+
});
|
|
526
|
+
|
|
453
527
|
it('advances one frame per update when frameRate is null', () => {
|
|
454
528
|
const frames: number[] = [];
|
|
455
529
|
const t = make({ frameRate: null, constructFrame: (f) => frames.push(f) });
|