distark-render 1.1.6 → 1.1.10
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/README.md +0 -0
- package/assets/presets/jumping-jack.json +194 -0
- package/assets/tank.json +0 -0
- package/dist/cli/animate.d.ts +0 -0
- package/dist/cli/animate.d.ts.map +0 -0
- package/dist/cli/animate.js +0 -0
- package/dist/cli/animate.js.map +0 -0
- package/dist/cli/diff.d.ts +0 -0
- package/dist/cli/diff.d.ts.map +0 -0
- package/dist/cli/diff.js +0 -0
- package/dist/cli/diff.js.map +0 -0
- package/dist/cli/distark-check.d.ts +0 -0
- package/dist/cli/distark-check.d.ts.map +0 -0
- package/dist/cli/distark-check.js +20 -14
- package/dist/cli/distark-check.js.map +1 -1
- package/dist/cli/query.d.ts +0 -0
- package/dist/cli/query.d.ts.map +0 -0
- package/dist/cli/query.js +0 -0
- package/dist/cli/query.js.map +0 -0
- package/dist/cli/record.d.ts +0 -0
- package/dist/cli/record.d.ts.map +0 -0
- package/dist/cli/record.js +0 -0
- package/dist/cli/record.js.map +0 -0
- package/dist/cli/render.d.ts +0 -0
- package/dist/cli/render.d.ts.map +0 -0
- package/dist/cli/render.js +0 -0
- package/dist/cli/render.js.map +0 -0
- package/dist/cli/scene.d.ts +15 -0
- package/dist/cli/scene.d.ts.map +1 -0
- package/dist/cli/scene.js +239 -0
- package/dist/cli/scene.js.map +1 -0
- package/dist/cli/shared.d.ts +0 -0
- package/dist/cli/shared.d.ts.map +0 -0
- package/dist/cli/shared.js +0 -0
- package/dist/cli/shared.js.map +0 -0
- package/dist/cli/test.d.ts +0 -0
- package/dist/cli/test.d.ts.map +0 -0
- package/dist/cli/test.js +0 -0
- package/dist/cli/test.js.map +0 -0
- package/dist/cli/verify.d.ts +0 -0
- package/dist/cli/verify.d.ts.map +0 -0
- package/dist/cli/verify.js +0 -0
- package/dist/cli/verify.js.map +0 -0
- package/dist/modules/adapters/p5Renderer.d.ts +0 -0
- package/dist/modules/adapters/p5Renderer.d.ts.map +0 -0
- package/dist/modules/adapters/p5Renderer.js +0 -0
- package/dist/modules/adapters/p5Renderer.js.map +0 -0
- package/dist/modules/adapters/skiaRenderer.d.ts +0 -0
- package/dist/modules/adapters/skiaRenderer.d.ts.map +0 -0
- package/dist/modules/adapters/skiaRenderer.js +0 -0
- package/dist/modules/adapters/skiaRenderer.js.map +0 -0
- package/dist/modules/animationDiff.d.ts +0 -0
- package/dist/modules/animationDiff.d.ts.map +0 -0
- package/dist/modules/animationDiff.js +0 -0
- package/dist/modules/animationDiff.js.map +0 -0
- package/dist/modules/browserSceneRenderer.d.ts +21 -0
- package/dist/modules/browserSceneRenderer.d.ts.map +1 -0
- package/dist/modules/browserSceneRenderer.js +263 -0
- package/dist/modules/browserSceneRenderer.js.map +1 -0
- package/dist/modules/eyeSystem.d.ts +0 -0
- package/dist/modules/eyeSystem.d.ts.map +0 -0
- package/dist/modules/eyeSystem.js +0 -0
- package/dist/modules/eyeSystem.js.map +0 -0
- package/dist/modules/imageLoad.d.ts +0 -0
- package/dist/modules/imageLoad.d.ts.map +0 -0
- package/dist/modules/imageLoad.js +0 -0
- package/dist/modules/imageLoad.js.map +0 -0
- package/dist/modules/mouthSystem.d.ts +0 -0
- package/dist/modules/mouthSystem.d.ts.map +0 -0
- package/dist/modules/mouthSystem.js +0 -0
- package/dist/modules/mouthSystem.js.map +0 -0
- package/dist/modules/renderRig.d.ts +0 -0
- package/dist/modules/renderRig.d.ts.map +1 -1
- package/dist/modules/renderRig.js +4 -12
- package/dist/modules/renderRig.js.map +1 -1
- package/dist/modules/sceneRenderer.d.ts +160 -0
- package/dist/modules/sceneRenderer.d.ts.map +1 -0
- package/dist/modules/sceneRenderer.js +616 -0
- package/dist/modules/sceneRenderer.js.map +1 -0
- package/dist/tests/helpers.d.ts +0 -0
- package/dist/tests/helpers.d.ts.map +0 -0
- package/dist/tests/helpers.js +0 -0
- package/dist/tests/helpers.js.map +0 -0
- package/dist/tests/test-animation-diff-rendering.d.ts +0 -0
- package/dist/tests/test-animation-diff-rendering.d.ts.map +0 -0
- package/dist/tests/test-animation-diff-rendering.js +0 -0
- package/dist/tests/test-animation-diff-rendering.js.map +0 -0
- package/dist/tests/test-animation-diff.d.ts +0 -0
- package/dist/tests/test-animation-diff.d.ts.map +0 -0
- package/dist/tests/test-animation-diff.js +0 -0
- package/dist/tests/test-animation-diff.js.map +0 -0
- package/dist/tests/test-autofit.d.ts +0 -0
- package/dist/tests/test-autofit.d.ts.map +0 -0
- package/dist/tests/test-autofit.js +0 -0
- package/dist/tests/test-autofit.js.map +0 -0
- package/dist/tests/test-base-autofit.d.ts +0 -0
- package/dist/tests/test-base-autofit.d.ts.map +0 -0
- package/dist/tests/test-base-autofit.js +0 -0
- package/dist/tests/test-base-autofit.js.map +0 -0
- package/dist/tests/test-browser-scene.d.ts +2 -0
- package/dist/tests/test-browser-scene.d.ts.map +1 -0
- package/dist/tests/test-browser-scene.js +132 -0
- package/dist/tests/test-browser-scene.js.map +1 -0
- package/dist/tests/test-cli.d.ts +0 -0
- package/dist/tests/test-cli.d.ts.map +0 -0
- package/dist/tests/test-cli.js +0 -0
- package/dist/tests/test-cli.js.map +0 -0
- package/dist/tests/test-image-loading.d.ts +0 -0
- package/dist/tests/test-image-loading.d.ts.map +0 -0
- package/dist/tests/test-image-loading.js +0 -0
- package/dist/tests/test-image-loading.js.map +0 -0
- package/dist/tests/test-joint-movement.d.ts +0 -0
- package/dist/tests/test-joint-movement.d.ts.map +0 -0
- package/dist/tests/test-joint-movement.js +0 -0
- package/dist/tests/test-joint-movement.js.map +0 -0
- package/dist/tests/test-p5-image-types.d.ts +0 -0
- package/dist/tests/test-p5-image-types.d.ts.map +0 -0
- package/dist/tests/test-p5-image-types.js +0 -0
- package/dist/tests/test-p5-image-types.js.map +0 -0
- package/dist/tests/test-render-cache-visual.d.ts +2 -0
- package/dist/tests/test-render-cache-visual.d.ts.map +1 -0
- package/dist/tests/test-render-cache-visual.js +108 -0
- package/dist/tests/test-render-cache-visual.js.map +1 -0
- package/dist/tests/test-render-cache.d.ts +2 -0
- package/dist/tests/test-render-cache.d.ts.map +1 -0
- package/dist/tests/test-render-cache.js +124 -0
- package/dist/tests/test-render-cache.js.map +1 -0
- package/dist/tests/test-scene.d.ts +13 -0
- package/dist/tests/test-scene.d.ts.map +1 -0
- package/dist/tests/test-scene.js +528 -0
- package/dist/tests/test-scene.js.map +1 -0
- package/dist/tests/test-skia.d.ts +0 -0
- package/dist/tests/test-skia.d.ts.map +0 -0
- package/dist/tests/test-skia.js +0 -0
- package/dist/tests/test-skia.js.map +0 -0
- package/dist/tests/test-torso-pivot.d.ts +0 -0
- package/dist/tests/test-torso-pivot.d.ts.map +0 -0
- package/dist/tests/test-torso-pivot.js +0 -0
- package/dist/tests/test-torso-pivot.js.map +0 -0
- package/dist/tests/test-visual-verification.d.ts +0 -0
- package/dist/tests/test-visual-verification.d.ts.map +0 -0
- package/dist/tests/test-visual-verification.js +0 -0
- package/dist/tests/test-visual-verification.js.map +0 -0
- package/dist/types.d.ts +0 -0
- package/dist/types.d.ts.map +0 -0
- package/dist/types.js +0 -0
- package/dist/types.js.map +0 -0
- package/package.json +9 -1
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scene Renderer Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests:
|
|
5
|
+
* 1. evaluateScene — timeline evaluation at various times
|
|
6
|
+
* 2. Camera interpolation
|
|
7
|
+
* 3. Character position interpolation
|
|
8
|
+
* 4. Hidden / flip / animation / variation evaluation
|
|
9
|
+
* 5. Auto-shot breakdown produces correct scene states
|
|
10
|
+
* 6. renderScene outputs a valid PNG (integration test)
|
|
11
|
+
*/
|
|
12
|
+
import { evaluateScene } from '../modules/sceneRenderer.js';
|
|
13
|
+
import { assert, printSummary } from './helpers.js';
|
|
14
|
+
// ── Test world JSON fixtures ──────────────────────────────────────
|
|
15
|
+
function makeTestWorld() {
|
|
16
|
+
return {
|
|
17
|
+
scene: { background: null },
|
|
18
|
+
characters: [
|
|
19
|
+
{ id: 'Tank', name: 'Tank', xCoor: 800, yCoor: 864, width: 100, height: 200 },
|
|
20
|
+
{ id: 'Toby', name: 'Toby', xCoor: 1700, yCoor: 864, width: 100, height: 200 },
|
|
21
|
+
],
|
|
22
|
+
objects: [],
|
|
23
|
+
dialogs: [],
|
|
24
|
+
timeline: [
|
|
25
|
+
// Camera track with 2 keyframes
|
|
26
|
+
{
|
|
27
|
+
characterId: '__camera__',
|
|
28
|
+
lanes: [{
|
|
29
|
+
property: 'camera',
|
|
30
|
+
keyframes: [
|
|
31
|
+
{ time: 0, value: { x: 1280, y: 720, width: 2560, height: 1440 }, easing: 'easeInOut' },
|
|
32
|
+
{ time: 5, value: { x: 1280, y: 720, width: 1280, height: 720 }, easing: 'easeInOut' },
|
|
33
|
+
]
|
|
34
|
+
}]
|
|
35
|
+
},
|
|
36
|
+
// Tank: position + flip + hidden + animation
|
|
37
|
+
{
|
|
38
|
+
characterId: 'Tank',
|
|
39
|
+
lanes: [
|
|
40
|
+
{
|
|
41
|
+
property: 'position',
|
|
42
|
+
keyframes: [
|
|
43
|
+
{ time: 0, value: { x: 853, y: 864 }, easing: 'easeInOut' },
|
|
44
|
+
{ time: 3, value: { x: 1200, y: 864 }, easing: 'easeInOut' },
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
property: 'flip',
|
|
49
|
+
keyframes: [
|
|
50
|
+
{ time: 0, value: false, easing: 'instant' },
|
|
51
|
+
{ time: 3, value: true, easing: 'instant' },
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
property: 'hidden',
|
|
56
|
+
keyframes: [
|
|
57
|
+
{ time: 0, value: false, easing: 'instant' },
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
property: 'animation',
|
|
62
|
+
keyframes: [
|
|
63
|
+
{ time: 0, value: 'anim1', easing: 'instant' },
|
|
64
|
+
{ time: 3, value: null, easing: 'instant' },
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
property: 'variation',
|
|
69
|
+
keyframes: [
|
|
70
|
+
{ time: 0, value: 'happy', easing: 'instant' },
|
|
71
|
+
{ time: 2, value: 'default', easing: 'instant' },
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
property: 'audio',
|
|
76
|
+
keyframes: [
|
|
77
|
+
{ time: 0, value: { id: '123', duration: 2.0 }, easing: 'instant' },
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
// Toby: hidden for first half, visible for second
|
|
83
|
+
{
|
|
84
|
+
characterId: 'Toby',
|
|
85
|
+
lanes: [
|
|
86
|
+
{
|
|
87
|
+
property: 'position',
|
|
88
|
+
keyframes: [
|
|
89
|
+
{ time: 0, value: { x: 1707, y: 864 }, easing: 'easeInOut' },
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
property: 'hidden',
|
|
94
|
+
keyframes: [
|
|
95
|
+
{ time: 0, value: true, easing: 'instant' },
|
|
96
|
+
{ time: 3, value: false, easing: 'instant' },
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
animations: {
|
|
103
|
+
'anim1': {
|
|
104
|
+
id: 'anim1',
|
|
105
|
+
name: 'test_anim',
|
|
106
|
+
frames: [
|
|
107
|
+
{ rotationValues: { head: 0 } },
|
|
108
|
+
{ rotationValues: { head: 0.3 } },
|
|
109
|
+
{ rotationValues: { head: 0 } },
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
variations: [],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// ── Tests ─────────────────────────────────────────────────────────
|
|
117
|
+
function testCameraAtTime0() {
|
|
118
|
+
console.log('\nTest: Camera at t=0');
|
|
119
|
+
const world = makeTestWorld();
|
|
120
|
+
const state = evaluateScene(world, 0);
|
|
121
|
+
assert(state.camera.width === 2560, 'Camera width at t=0 should be 2560');
|
|
122
|
+
assert(state.camera.height === 1440, 'Camera height at t=0 should be 1440');
|
|
123
|
+
assert(state.camera.x === 1280, 'Camera x at t=0 should be 1280');
|
|
124
|
+
}
|
|
125
|
+
function testCameraMidpoint() {
|
|
126
|
+
console.log('\nTest: Camera interpolation at t=2.5');
|
|
127
|
+
const world = makeTestWorld();
|
|
128
|
+
const state = evaluateScene(world, 2.5);
|
|
129
|
+
// Linear interpolation: 2560 → 1280 at t=2.5 (halfway through 0→5)
|
|
130
|
+
assert(state.camera.width === 1920, `Camera width at t=2.5 should be 1920, got ${state.camera.width}`);
|
|
131
|
+
assert(state.camera.height === 1080, `Camera height at t=2.5 should be 1080, got ${state.camera.height}`);
|
|
132
|
+
}
|
|
133
|
+
function testCameraAtEnd() {
|
|
134
|
+
console.log('\nTest: Camera at t=5');
|
|
135
|
+
const world = makeTestWorld();
|
|
136
|
+
const state = evaluateScene(world, 5);
|
|
137
|
+
assert(state.camera.width === 1280, `Camera width at t=5 should be 1280, got ${state.camera.width}`);
|
|
138
|
+
}
|
|
139
|
+
function testCharacterPositionInterpolation() {
|
|
140
|
+
console.log('\nTest: Character position interpolation');
|
|
141
|
+
const world = makeTestWorld();
|
|
142
|
+
// t=0: Tank at x=853
|
|
143
|
+
const s0 = evaluateScene(world, 0);
|
|
144
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
145
|
+
assert(tank0.x === 853, `Tank x at t=0 should be 853, got ${tank0.x}`);
|
|
146
|
+
// t=1.5: Tank midway between 853 and 1200
|
|
147
|
+
const s1 = evaluateScene(world, 1.5);
|
|
148
|
+
const tank1 = s1.characters.find(c => c.id === 'Tank');
|
|
149
|
+
const expectedMid = 853 + (1200 - 853) * (1.5 / 3);
|
|
150
|
+
assert(Math.abs(tank1.x - expectedMid) < 1, `Tank x at t=1.5 should be ~${expectedMid.toFixed(0)}, got ${tank1.x.toFixed(0)}`);
|
|
151
|
+
// t=3: Tank at x=1200
|
|
152
|
+
const s3 = evaluateScene(world, 3);
|
|
153
|
+
const tank3 = s3.characters.find(c => c.id === 'Tank');
|
|
154
|
+
assert(tank3.x === 1200, `Tank x at t=3 should be 1200, got ${tank3.x}`);
|
|
155
|
+
}
|
|
156
|
+
function testFlipKeyframes() {
|
|
157
|
+
console.log('\nTest: Flip keyframes (instant easing)');
|
|
158
|
+
const world = makeTestWorld();
|
|
159
|
+
const s0 = evaluateScene(world, 0);
|
|
160
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
161
|
+
assert(tank0.flipX === false, 'Tank should not be flipped at t=0');
|
|
162
|
+
const s2 = evaluateScene(world, 2);
|
|
163
|
+
const tank2 = s2.characters.find(c => c.id === 'Tank');
|
|
164
|
+
assert(tank2.flipX === false, 'Tank should not be flipped at t=2 (before t=3 instant)');
|
|
165
|
+
const s3 = evaluateScene(world, 3);
|
|
166
|
+
const tank3 = s3.characters.find(c => c.id === 'Tank');
|
|
167
|
+
assert(tank3.flipX === true, 'Tank should be flipped at t=3');
|
|
168
|
+
}
|
|
169
|
+
function testHiddenKeyframes() {
|
|
170
|
+
console.log('\nTest: Hidden keyframes');
|
|
171
|
+
const world = makeTestWorld();
|
|
172
|
+
// Toby hidden at t=0
|
|
173
|
+
const s0 = evaluateScene(world, 0);
|
|
174
|
+
const toby0 = s0.characters.find(c => c.id === 'Toby');
|
|
175
|
+
assert(toby0.hidden === true, 'Toby should be hidden at t=0');
|
|
176
|
+
// Toby visible at t=3
|
|
177
|
+
const s3 = evaluateScene(world, 3);
|
|
178
|
+
const toby3 = s3.characters.find(c => c.id === 'Toby');
|
|
179
|
+
assert(toby3.hidden === false, 'Toby should be visible at t=3');
|
|
180
|
+
// Tank always visible
|
|
181
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
182
|
+
assert(tank0.hidden === false, 'Tank should be visible at t=0');
|
|
183
|
+
}
|
|
184
|
+
function testAnimationKeyframes() {
|
|
185
|
+
console.log('\nTest: Animation keyframes');
|
|
186
|
+
const world = makeTestWorld();
|
|
187
|
+
const s0 = evaluateScene(world, 0);
|
|
188
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
189
|
+
assert(tank0.animationId === 'anim1', 'Tank should have anim1 at t=0');
|
|
190
|
+
assert(tank0.animationProgress >= 0, 'Tank should have valid animation progress');
|
|
191
|
+
// After t=3, animation should be null
|
|
192
|
+
const s4 = evaluateScene(world, 4);
|
|
193
|
+
const tank4 = s4.characters.find(c => c.id === 'Tank');
|
|
194
|
+
// Animation lane has value null at t=3 (instant), so at t=4 it should be null
|
|
195
|
+
assert(tank4.animationId === null || tank4.animationId === 'anim1', `Tank animation check at t=4, got ${tank4.animationId}`);
|
|
196
|
+
}
|
|
197
|
+
function testVariationKeyframes() {
|
|
198
|
+
console.log('\nTest: Variation keyframes');
|
|
199
|
+
const world = makeTestWorld();
|
|
200
|
+
const s0 = evaluateScene(world, 0);
|
|
201
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
202
|
+
assert(tank0.variationName === 'happy', `Tank variation at t=0 should be 'happy', got ${tank0.variationName}`);
|
|
203
|
+
const s2 = evaluateScene(world, 2);
|
|
204
|
+
const tank2 = s2.characters.find(c => c.id === 'Tank');
|
|
205
|
+
assert(tank2.variationName === 'default', `Tank variation at t=2 should be 'default', got ${tank2.variationName}`);
|
|
206
|
+
}
|
|
207
|
+
function testAudioLaneIgnored() {
|
|
208
|
+
console.log('\nTest: Audio lane does not affect visual state');
|
|
209
|
+
const world = makeTestWorld();
|
|
210
|
+
// evaluateScene should not crash on audio lanes
|
|
211
|
+
const s0 = evaluateScene(world, 0);
|
|
212
|
+
const tank0 = s0.characters.find(c => c.id === 'Tank');
|
|
213
|
+
assert(tank0.id === 'Tank', 'Tank should exist despite audio lane');
|
|
214
|
+
assert(tank0.hidden === false, 'Audio lane should not hide character');
|
|
215
|
+
}
|
|
216
|
+
function testEmptyWorld() {
|
|
217
|
+
console.log('\nTest: Empty world');
|
|
218
|
+
const world = {
|
|
219
|
+
scene: {},
|
|
220
|
+
characters: [],
|
|
221
|
+
timeline: [],
|
|
222
|
+
};
|
|
223
|
+
const state = evaluateScene(world, 0);
|
|
224
|
+
assert(state.characters.length === 0, 'Empty world should have 0 characters');
|
|
225
|
+
assert(state.camera.width === 2560, 'Default camera width should be 2560');
|
|
226
|
+
}
|
|
227
|
+
function testCharacterWithNoTrack() {
|
|
228
|
+
console.log('\nTest: Character with no track uses defaults');
|
|
229
|
+
const world = {
|
|
230
|
+
characters: [
|
|
231
|
+
{ id: 'Lonely', xCoor: 500, yCoor: 600, width: 80, height: 160 }
|
|
232
|
+
],
|
|
233
|
+
timeline: [],
|
|
234
|
+
};
|
|
235
|
+
const state = evaluateScene(world, 0);
|
|
236
|
+
const char = state.characters[0];
|
|
237
|
+
assert(char.x === 500, `Lonely x should be 500, got ${char.x}`);
|
|
238
|
+
assert(char.y === 600, `Lonely y should be 600, got ${char.y}`);
|
|
239
|
+
assert(char.hidden === false, 'Lonely should default to visible');
|
|
240
|
+
assert(char.flipX === false, 'Lonely should default to not flipped');
|
|
241
|
+
}
|
|
242
|
+
function testBeforeFirstKeyframe() {
|
|
243
|
+
console.log('\nTest: Evaluate before first keyframe returns first value');
|
|
244
|
+
const world = {
|
|
245
|
+
characters: [
|
|
246
|
+
{ id: 'Late', xCoor: 100, yCoor: 100, width: 50, height: 50 }
|
|
247
|
+
],
|
|
248
|
+
timeline: [{
|
|
249
|
+
characterId: 'Late',
|
|
250
|
+
lanes: [{
|
|
251
|
+
property: 'position',
|
|
252
|
+
keyframes: [
|
|
253
|
+
{ time: 5, value: { x: 999, y: 888 }, easing: 'easeInOut' },
|
|
254
|
+
]
|
|
255
|
+
}]
|
|
256
|
+
}],
|
|
257
|
+
};
|
|
258
|
+
const state = evaluateScene(world, 0);
|
|
259
|
+
const char = state.characters[0];
|
|
260
|
+
assert(char.x === 999, `Before first kf should snap to first value, got x=${char.x}`);
|
|
261
|
+
}
|
|
262
|
+
function testSmartSceneWorldFormat() {
|
|
263
|
+
console.log('\nTest: World JSON from SmartScene format (CharacterTrack[])');
|
|
264
|
+
// This mimics the output of World::SmartScene.enhance! from ORC
|
|
265
|
+
const world = {
|
|
266
|
+
scene: { background: null },
|
|
267
|
+
characters: [
|
|
268
|
+
{ id: 'Tank', xCoor: 800, yCoor: 864, width: 100, height: 200 },
|
|
269
|
+
{ id: 'Toby', xCoor: 1700, yCoor: 864, width: 100, height: 200 },
|
|
270
|
+
],
|
|
271
|
+
timeline: [
|
|
272
|
+
{
|
|
273
|
+
characterId: 'Tank',
|
|
274
|
+
lanes: [
|
|
275
|
+
{ property: 'position', keyframes: [
|
|
276
|
+
{ time: 0, value: { x: 853, y: 864 }, easing: 'easeInOut' },
|
|
277
|
+
// Listener reaction bob
|
|
278
|
+
{ time: 3.7, value: { x: 853, y: 855 }, easing: 'easeInOut' },
|
|
279
|
+
{ time: 4.2, value: { x: 853, y: 864 }, easing: 'easeInOut' },
|
|
280
|
+
] },
|
|
281
|
+
{ property: 'hidden', keyframes: [
|
|
282
|
+
{ time: 0, value: false, easing: 'instant' },
|
|
283
|
+
] },
|
|
284
|
+
{ property: 'flip', keyframes: [
|
|
285
|
+
{ time: 0, value: false, easing: 'instant' },
|
|
286
|
+
] },
|
|
287
|
+
{ property: 'audio', keyframes: [
|
|
288
|
+
{ time: 0, value: { id: '1', duration: 3.0, uuid: 'abc' }, easing: 'instant' },
|
|
289
|
+
] },
|
|
290
|
+
{ property: 'mouth', keyframes: [
|
|
291
|
+
{ time: 0, value: 'open', easing: 'instant' },
|
|
292
|
+
{ time: 3, value: 'closed', easing: 'instant' },
|
|
293
|
+
] },
|
|
294
|
+
{ property: 'variation', keyframes: [
|
|
295
|
+
{ time: 0, value: 'happy', easing: 'instant' },
|
|
296
|
+
{ time: 3.1, value: 'default', easing: 'instant' },
|
|
297
|
+
] },
|
|
298
|
+
]
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
characterId: 'Toby',
|
|
302
|
+
lanes: [
|
|
303
|
+
{ property: 'position', keyframes: [
|
|
304
|
+
{ time: 0, value: { x: 1707, y: 864 }, easing: 'easeInOut' },
|
|
305
|
+
] },
|
|
306
|
+
{ property: 'hidden', keyframes: [
|
|
307
|
+
{ time: 0, value: false, easing: 'instant' },
|
|
308
|
+
] },
|
|
309
|
+
{ property: 'flip', keyframes: [
|
|
310
|
+
{ time: 0, value: true, easing: 'instant' },
|
|
311
|
+
] },
|
|
312
|
+
]
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
characterId: '__camera__',
|
|
316
|
+
lanes: [{
|
|
317
|
+
property: 'camera',
|
|
318
|
+
keyframes: [
|
|
319
|
+
{ time: 0, value: { x: 1280, y: 720, width: 2560, height: 1440 }, easing: 'easeInOut' },
|
|
320
|
+
{ time: 5, value: { x: 1280, y: 720, width: 2048, height: 1152 }, easing: 'easeInOut' },
|
|
321
|
+
]
|
|
322
|
+
}]
|
|
323
|
+
},
|
|
324
|
+
],
|
|
325
|
+
animations: {},
|
|
326
|
+
variations: [],
|
|
327
|
+
dialogs: [],
|
|
328
|
+
};
|
|
329
|
+
const state = evaluateScene(world, 0);
|
|
330
|
+
const tank = state.characters.find(c => c.id === 'Tank');
|
|
331
|
+
assert(tank.x === 853, `Tank x at t=0 should be 853`);
|
|
332
|
+
assert(tank.flipX === false, `Tank should not be flipped`);
|
|
333
|
+
assert(tank.variationName === 'happy', `Tank variation should be 'happy'`);
|
|
334
|
+
const toby = state.characters.find(c => c.id === 'Toby');
|
|
335
|
+
assert(toby.flipX === true, `Toby should be flipped (facing Tank)`);
|
|
336
|
+
assert(toby.hidden === false, `Toby should be visible`);
|
|
337
|
+
// Check listener reaction bob
|
|
338
|
+
const state_bob = evaluateScene(world, 3.7);
|
|
339
|
+
const tank_bob = state_bob.characters.find(c => c.id === 'Tank');
|
|
340
|
+
assert(tank_bob.y === 855, `Tank y during reaction should be 855, got ${tank_bob.y}`);
|
|
341
|
+
// Check variation change
|
|
342
|
+
const state_var = evaluateScene(world, 3.5);
|
|
343
|
+
const tank_var = state_var.characters.find(c => c.id === 'Tank');
|
|
344
|
+
assert(tank_var.variationName === 'default', `Tank variation at t=3.5 should be 'default', got ${tank_var.variationName}`);
|
|
345
|
+
}
|
|
346
|
+
// ── ORC property-track animation conversion test ──────────────────
|
|
347
|
+
function testOrcAnimationConversion() {
|
|
348
|
+
console.log('\nTest: ORC property-track animation format recognized');
|
|
349
|
+
// This is the format ORC stores: [{property: "joint.head", time: 0, value: 0.3}, ...]
|
|
350
|
+
const orcAnim = {
|
|
351
|
+
characters: [
|
|
352
|
+
{ id: 'Tank', xCoor: 800, yCoor: 864, width: 100, height: 200 }
|
|
353
|
+
],
|
|
354
|
+
timeline: [
|
|
355
|
+
{
|
|
356
|
+
characterId: 'Tank',
|
|
357
|
+
lanes: [
|
|
358
|
+
{ property: 'animation', keyframes: [
|
|
359
|
+
{ time: 0, value: 'wave', easing: 'instant' },
|
|
360
|
+
] },
|
|
361
|
+
]
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
animations: {
|
|
365
|
+
'wave': {
|
|
366
|
+
id: 'wave',
|
|
367
|
+
name: 'wave_anim',
|
|
368
|
+
// ORC format: property-based keyframes, NOT rig frames
|
|
369
|
+
frames: [
|
|
370
|
+
{ property: 'joint.head', time: 0, value: 0, easing: 'easeInOut' },
|
|
371
|
+
{ property: 'joint.head', time: 0.5, value: 0.3, easing: 'easeInOut' },
|
|
372
|
+
{ property: 'joint.head', time: 1.0, value: 0, easing: 'easeInOut' },
|
|
373
|
+
{ property: 'joint.leftUpperArm', time: 0, value: -3.14, easing: 'easeInOut' },
|
|
374
|
+
{ property: 'joint.leftUpperArm', time: 0.5, value: -4.5, easing: 'easeInOut' },
|
|
375
|
+
{ property: 'joint.leftUpperArm', time: 1.0, value: -3.14, easing: 'easeInOut' },
|
|
376
|
+
{ property: 'pivotPoint.torso_head', time: 0, value: { x: 0, y: -50 }, easing: 'linear' },
|
|
377
|
+
{ property: 'pivotPoint.torso_head', time: 1.0, value: { x: 0, y: -50 }, easing: 'linear' },
|
|
378
|
+
]
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
const state = evaluateScene(orcAnim, 0);
|
|
383
|
+
const tank = state.characters[0];
|
|
384
|
+
assert(tank.animationId === 'wave', `Should have 'wave' animation, got ${tank.animationId}`);
|
|
385
|
+
assert(tank.animationProgress >= 0, `Animation progress should be >= 0, got ${tank.animationProgress}`);
|
|
386
|
+
}
|
|
387
|
+
function testOrcAnimationDiffFrames() {
|
|
388
|
+
console.log('\nTest: ORC animation converts to rig frames with correct joint values');
|
|
389
|
+
// Import the internal converter to test directly
|
|
390
|
+
// We can't import private functions, but we can test via evaluateScene behavior
|
|
391
|
+
// Let's just verify the animation is picked up and frame index cycles
|
|
392
|
+
const world = {
|
|
393
|
+
characters: [{ id: 'A', xCoor: 100, yCoor: 100, width: 50, height: 50 }],
|
|
394
|
+
timeline: [{
|
|
395
|
+
characterId: 'A',
|
|
396
|
+
lanes: [
|
|
397
|
+
{ property: 'animation', keyframes: [{ time: 0, value: 'walk', easing: 'instant' }] }
|
|
398
|
+
]
|
|
399
|
+
}],
|
|
400
|
+
animations: {
|
|
401
|
+
'walk': {
|
|
402
|
+
id: 'walk', name: 'walk',
|
|
403
|
+
frames: [
|
|
404
|
+
{ property: 'joint.head', time: 0, value: 0 },
|
|
405
|
+
{ property: 'joint.head', time: 1, value: 0.5 },
|
|
406
|
+
]
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
// At t=0 and t=0.5, animation should be active with different progress values
|
|
411
|
+
const s0 = evaluateScene(world, 0);
|
|
412
|
+
const s05 = evaluateScene(world, 0.5);
|
|
413
|
+
assert(s0.characters[0].animationId === 'walk', 'Walk animation active at t=0');
|
|
414
|
+
assert(s05.characters[0].animationId === 'walk', 'Walk animation active at t=0.5');
|
|
415
|
+
// Progress should advance within a single cycle (0.5s is mid-cycle)
|
|
416
|
+
assert(s05.characters[0].animationProgress > s0.characters[0].animationProgress, `Progress should advance: t=0=${s0.characters[0].animationProgress}, t=0.5=${s05.characters[0].animationProgress}`);
|
|
417
|
+
}
|
|
418
|
+
function testRigFrameFormatAnimation() {
|
|
419
|
+
console.log('\nTest: distark_render rig-frame animation format (jumping-jack style)');
|
|
420
|
+
const world = {
|
|
421
|
+
characters: [{ id: 'B', xCoor: 500, yCoor: 500, width: 80, height: 160 }],
|
|
422
|
+
timeline: [{
|
|
423
|
+
characterId: 'B',
|
|
424
|
+
lanes: [
|
|
425
|
+
{ property: 'animation', keyframes: [{ time: 0, value: 'jj', easing: 'instant' }] }
|
|
426
|
+
]
|
|
427
|
+
}],
|
|
428
|
+
animations: {
|
|
429
|
+
'jj': {
|
|
430
|
+
id: 'jj', name: 'jumping-jack',
|
|
431
|
+
frames: [
|
|
432
|
+
{ rotationValues: { leftUpperArm: -3.14, rightUpperArm: 3.14 } },
|
|
433
|
+
{ rotationValues: { leftUpperArm: -4.5, rightUpperArm: 4.5 } },
|
|
434
|
+
{ rotationValues: { leftUpperArm: -3.14, rightUpperArm: 3.14 } },
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
const s0 = evaluateScene(world, 0);
|
|
440
|
+
assert(s0.characters[0].animationId === 'jj', 'JJ animation active');
|
|
441
|
+
assert(s0.characters[0].animationProgress === 0, `Progress 0 at t=0, got ${s0.characters[0].animationProgress}`);
|
|
442
|
+
}
|
|
443
|
+
function testMotionInterpolation() {
|
|
444
|
+
console.log('\nTest: Motion — character moves between positions across time');
|
|
445
|
+
const world = {
|
|
446
|
+
characters: [{ id: 'Mover', xCoor: 0, yCoor: 500, width: 50, height: 50 }],
|
|
447
|
+
timeline: [{
|
|
448
|
+
characterId: 'Mover',
|
|
449
|
+
lanes: [{
|
|
450
|
+
property: 'position',
|
|
451
|
+
keyframes: [
|
|
452
|
+
{ time: 0, value: { x: 100, y: 500 }, easing: 'easeInOut' },
|
|
453
|
+
{ time: 2, value: { x: 500, y: 500 }, easing: 'easeInOut' },
|
|
454
|
+
{ time: 4, value: { x: 500, y: 200 }, easing: 'easeInOut' },
|
|
455
|
+
]
|
|
456
|
+
}]
|
|
457
|
+
}],
|
|
458
|
+
};
|
|
459
|
+
const s0 = evaluateScene(world, 0);
|
|
460
|
+
assert(s0.characters[0].x === 100, `t=0: x should be 100, got ${s0.characters[0].x}`);
|
|
461
|
+
const s1 = evaluateScene(world, 1);
|
|
462
|
+
assert(s1.characters[0].x === 300, `t=1: x should be 300, got ${s1.characters[0].x}`);
|
|
463
|
+
assert(s1.characters[0].y === 500, `t=1: y should be 500, got ${s1.characters[0].y}`);
|
|
464
|
+
const s3 = evaluateScene(world, 3);
|
|
465
|
+
assert(s3.characters[0].x === 500, `t=3: x should be 500, got ${s3.characters[0].x}`);
|
|
466
|
+
assert(s3.characters[0].y === 350, `t=3: y should be 350, got ${s3.characters[0].y}`);
|
|
467
|
+
const s4 = evaluateScene(world, 4);
|
|
468
|
+
assert(s4.characters[0].y === 200, `t=4: y should be 200, got ${s4.characters[0].y}`);
|
|
469
|
+
}
|
|
470
|
+
// ── Integration test: renderScene ─────────────────────────────────
|
|
471
|
+
async function testRenderSceneProducesFile() {
|
|
472
|
+
console.log('\nTest: renderScene produces a PNG file');
|
|
473
|
+
const { renderScene } = await import('../modules/sceneRenderer.js');
|
|
474
|
+
const { existsSync, unlinkSync } = await import('fs');
|
|
475
|
+
const world = makeTestWorld();
|
|
476
|
+
const outputPath = 'test-outputs/scene-test-output.png';
|
|
477
|
+
try {
|
|
478
|
+
const report = await renderScene(world, 0, outputPath, {}, { width: 640, height: 360 });
|
|
479
|
+
assert(existsSync(outputPath), `Output file should exist at ${outputPath}`);
|
|
480
|
+
assert(report.time === 0, 'Report time should be 0');
|
|
481
|
+
assert(report.canvas.width === 640, 'Report canvas width should be 640');
|
|
482
|
+
assert(report.characters.length === 2, 'Report should have 2 characters');
|
|
483
|
+
assert(report.quality.total_characters === 2, 'Quality total_characters should be 2');
|
|
484
|
+
assert(report.quality.visible_characters === 1, 'Quality visible_characters should be 1 (Toby hidden)');
|
|
485
|
+
assert(report.quality.has_camera_move === true, 'Quality should report camera move');
|
|
486
|
+
// Check screen bounds are reasonable
|
|
487
|
+
const tankReport = report.characters.find(c => c.id === 'Tank');
|
|
488
|
+
assert(!tankReport.hidden, 'Tank should not be hidden in report');
|
|
489
|
+
assert(tankReport.screenBounds.w > 0, 'Tank screen width should be > 0');
|
|
490
|
+
// Cleanup
|
|
491
|
+
unlinkSync(outputPath);
|
|
492
|
+
}
|
|
493
|
+
catch (e) {
|
|
494
|
+
console.error(` ⚠️ renderScene test skipped (skia-canvas may not be available): ${e.message}`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
// ── Run ───────────────────────────────────────────────────────────
|
|
498
|
+
async function main() {
|
|
499
|
+
console.log('Scene Renderer Tests');
|
|
500
|
+
console.log('='.repeat(50));
|
|
501
|
+
// Pure evaluation tests (no rendering needed)
|
|
502
|
+
testCameraAtTime0();
|
|
503
|
+
testCameraMidpoint();
|
|
504
|
+
testCameraAtEnd();
|
|
505
|
+
testCharacterPositionInterpolation();
|
|
506
|
+
testFlipKeyframes();
|
|
507
|
+
testHiddenKeyframes();
|
|
508
|
+
testAnimationKeyframes();
|
|
509
|
+
testVariationKeyframes();
|
|
510
|
+
testAudioLaneIgnored();
|
|
511
|
+
testEmptyWorld();
|
|
512
|
+
testCharacterWithNoTrack();
|
|
513
|
+
testBeforeFirstKeyframe();
|
|
514
|
+
testSmartSceneWorldFormat();
|
|
515
|
+
// Animation format tests
|
|
516
|
+
testOrcAnimationConversion();
|
|
517
|
+
testOrcAnimationDiffFrames();
|
|
518
|
+
testRigFrameFormatAnimation();
|
|
519
|
+
testMotionInterpolation();
|
|
520
|
+
// Integration test (needs skia-canvas)
|
|
521
|
+
await testRenderSceneProducesFile();
|
|
522
|
+
printSummary();
|
|
523
|
+
}
|
|
524
|
+
main().catch(err => {
|
|
525
|
+
console.error(err);
|
|
526
|
+
process.exit(1);
|
|
527
|
+
});
|
|
528
|
+
//# sourceMappingURL=test-scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-scene.js","sourceRoot":"","sources":["../../tests/test-scene.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
package/dist/tests/test-skia.js
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/types.d.ts
CHANGED
|
File without changes
|
package/dist/types.d.ts.map
CHANGED
|
File without changes
|
package/dist/types.js
CHANGED
|
File without changes
|
package/dist/types.js.map
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "distark-render",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"description": "Rendering-agnostic character rig system with TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/modules/renderRig.js",
|
|
@@ -37,6 +37,14 @@
|
|
|
37
37
|
"./animationDiff": {
|
|
38
38
|
"types": "./dist/modules/animationDiff.d.ts",
|
|
39
39
|
"import": "./dist/modules/animationDiff.js"
|
|
40
|
+
},
|
|
41
|
+
"./browserSceneRenderer": {
|
|
42
|
+
"types": "./dist/modules/browserSceneRenderer.d.ts",
|
|
43
|
+
"import": "./dist/modules/browserSceneRenderer.js"
|
|
44
|
+
},
|
|
45
|
+
"./sceneRenderer": {
|
|
46
|
+
"types": "./dist/modules/sceneRenderer.d.ts",
|
|
47
|
+
"import": "./dist/modules/sceneRenderer.js"
|
|
40
48
|
}
|
|
41
49
|
},
|
|
42
50
|
"files": [
|