distark-render 1.1.14 → 1.1.16
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/cli/distark-check.js +16 -16
- package/dist/modules/adapters/p5Renderer.d.ts.map +1 -1
- package/dist/modules/adapters/p5Renderer.js +54 -12
- package/dist/modules/adapters/p5Renderer.js.map +1 -1
- package/dist/modules/adapters/skiaRenderer.d.ts.map +1 -1
- package/dist/modules/adapters/skiaRenderer.js +2 -1
- package/dist/modules/adapters/skiaRenderer.js.map +1 -1
- package/dist/modules/eyeSystem.d.ts.map +1 -1
- package/dist/modules/eyeSystem.js +104 -69
- package/dist/modules/eyeSystem.js.map +1 -1
- package/dist/modules/imageLoad.d.ts +50 -0
- package/dist/modules/imageLoad.d.ts.map +1 -1
- package/dist/modules/imageLoad.js +262 -18
- package/dist/modules/imageLoad.js.map +1 -1
- package/dist/tests/test-auto-eye-movement-e2e.d.ts +24 -0
- package/dist/tests/test-auto-eye-movement-e2e.d.ts.map +1 -0
- package/dist/tests/test-auto-eye-movement-e2e.js +514 -0
- package/dist/tests/test-auto-eye-movement-e2e.js.map +1 -0
- package/dist/tests/test-eye-system-reset.d.ts +15 -0
- package/dist/tests/test-eye-system-reset.d.ts.map +1 -0
- package/dist/tests/test-eye-system-reset.js +148 -0
- package/dist/tests/test-eye-system-reset.js.map +1 -0
- package/dist/tests/test-svg-rerasterization.js +194 -4
- package/dist/tests/test-svg-rerasterization.js.map +1 -1
- package/dist/tests/test-teen-tank-rig.d.ts +12 -0
- package/dist/tests/test-teen-tank-rig.d.ts.map +1 -0
- package/dist/tests/test-teen-tank-rig.js +122 -0
- package/dist/tests/test-teen-tank-rig.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TRUE End-to-End test: Auto eye movement with the real EyeSystem
|
|
3
|
+
*
|
|
4
|
+
* NO mocking of any kind — not Math.random, not Date.now, not EyeSystem.
|
|
5
|
+
* Tests use the real compiled module and real randomness.
|
|
6
|
+
*
|
|
7
|
+
* This is the ground-truth test that proves the eye system physically moves
|
|
8
|
+
* the iris when update(t, isPlaying=true) is called over time.
|
|
9
|
+
*
|
|
10
|
+
* Context:
|
|
11
|
+
* In the app, Body.update() now calls:
|
|
12
|
+
* const wallTime = Date.now() / 1000;
|
|
13
|
+
* eyeSystem.update(wallTime, /*isPlaying=*/true, ...);
|
|
14
|
+
* regardless of whether the timeline is playing or paused.
|
|
15
|
+
* These tests verify that this produces genuine, visible iris movement.
|
|
16
|
+
*
|
|
17
|
+
* The "teen tank" character (character_rig (7).json) is used for targeted tests
|
|
18
|
+
* because the user observed zero iris movement with that specific character.
|
|
19
|
+
* Root cause: socket-derived rangeX/rangeY both clamped to 0 when iris base
|
|
20
|
+
* dimensions exceeded the available socket space. Fixed by removing the iris-
|
|
21
|
+
* size subtraction and falling back to DEFAULT_MOVEMENT_RANGES instead.
|
|
22
|
+
*/
|
|
23
|
+
import { createEyeSystem } from '../modules/eyeSystem.js';
|
|
24
|
+
import { assert, printSummary } from './helpers.js';
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Generic eye data — matches the rig used in the reactapp tests
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
function makeEyes() {
|
|
29
|
+
return {
|
|
30
|
+
leftIris: 'https://cdn.example.com/iris.png',
|
|
31
|
+
rightIris: 'https://cdn.example.com/iris.png',
|
|
32
|
+
leftIrisXCoor: 10,
|
|
33
|
+
leftIrisYCoor: -50,
|
|
34
|
+
rightIrisXCoor: -10,
|
|
35
|
+
rightIrisYCoor: -50,
|
|
36
|
+
leftIrisWidth: 20,
|
|
37
|
+
leftIrisHeight: 20,
|
|
38
|
+
rightIrisWidth: 20,
|
|
39
|
+
rightIrisHeight: 20,
|
|
40
|
+
leftIrisWidthRatio: 1,
|
|
41
|
+
leftIrisHeightRatio: 1,
|
|
42
|
+
rightIrisWidthRatio: 1,
|
|
43
|
+
rightIrisHeightRatio: 1,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Teen-tank eye data extracted from character_rig (7).json
|
|
48
|
+
// This is the exact character the user observed to have zero iris movement.
|
|
49
|
+
//
|
|
50
|
+
// Root-cause analysis:
|
|
51
|
+
// socket-derived rangeX ≈ 21.5 px, rangeY ≈ 30.2 px (after 50 % margin)
|
|
52
|
+
// Iris base dimensions: 49 × 63 px (ratios 2.7× and 2.2×)
|
|
53
|
+
// Previous code subtracted maxIrisWidth/2 = 24.5 px → rangeX < 0 → clamped to 0
|
|
54
|
+
// maxIrisHeight/2 = 31.5 px → rangeY < 0 → clamped to 0
|
|
55
|
+
// Fix: when socket geometry yields an effectively-zero range, fall back to
|
|
56
|
+
// DEFAULT_MOVEMENT_RANGES so eyes always wander.
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
const TEEN_TANK_EYES = {
|
|
59
|
+
leftIris: 'https://orchestrator.distark.com/download/NvsBD0',
|
|
60
|
+
rightIris: 'https://orchestrator.distark.com/download/NvsBD0',
|
|
61
|
+
leftIrisXCoor: 13,
|
|
62
|
+
leftIrisYCoor: -171,
|
|
63
|
+
rightIrisXCoor: 200,
|
|
64
|
+
rightIrisYCoor: -192,
|
|
65
|
+
leftIrisWidth: 49,
|
|
66
|
+
leftIrisHeight: 63,
|
|
67
|
+
rightIrisWidth: 42,
|
|
68
|
+
rightIrisHeight: 59,
|
|
69
|
+
leftIrisWidthRatio: 2.7,
|
|
70
|
+
leftIrisHeightRatio: 2.2,
|
|
71
|
+
rightIrisWidthRatio: 3.2,
|
|
72
|
+
rightIrisHeightRatio: 2.2,
|
|
73
|
+
leftEyeImage: 'cdce0fc9e149625fcb7fd1d6fb60f3e2',
|
|
74
|
+
rightEyeImage: '3a2b8df67d9452ddeb546dbdbeb33387',
|
|
75
|
+
leftEyeLidOpen: 'e84d33d805353c1ac1944ab39898e501',
|
|
76
|
+
rightEyeLidOpen: '022fd7a6167689244aa3ab2fe8ac1b0d',
|
|
77
|
+
leftEyeLidClosed: '80a8dbb2cc2e2f40130129fa9e4c3bcc',
|
|
78
|
+
rightEyeLidClosed: '80a8dbb2cc2e2f40130129fa9e4c3bcc',
|
|
79
|
+
};
|
|
80
|
+
// Teen tank socket data (abbreviated — first/last 3 points of each polygon)
|
|
81
|
+
// The full polygons are large; the eye system only needs them to compute bounds.
|
|
82
|
+
// We pass the full polygon arrays here so the test reflects real-world behaviour.
|
|
83
|
+
const TEEN_TANK_EYE_SOCKETS = {
|
|
84
|
+
left: [
|
|
85
|
+
{ x: 48.01, y: 47.16 }, { x: 47.80, y: 47.16 }, { x: 46.75, y: 47.16 },
|
|
86
|
+
{ x: 46.54, y: 47.16 }, { x: 46.13, y: 47.16 }, { x: 45.50, y: 47.16 },
|
|
87
|
+
{ x: 45.29, y: 47.16 }, { x: 45.08, y: 47.16 }, { x: 44.66, y: 47.16 },
|
|
88
|
+
{ x: 44.45, y: 46.96 }, { x: 44.24, y: 46.96 }, { x: 44.03, y: 46.96 },
|
|
89
|
+
{ x: 43.82, y: 46.96 }, { x: 43.40, y: 46.76 }, { x: 43.19, y: 46.76 },
|
|
90
|
+
{ x: 42.78, y: 46.76 }, { x: 42.57, y: 46.76 }, { x: 42.36, y: 46.76 },
|
|
91
|
+
{ x: 41.94, y: 46.76 }, { x: 41.52, y: 46.76 }, { x: 40.89, y: 47.16 },
|
|
92
|
+
{ x: 40.47, y: 47.16 }, { x: 40.05, y: 47.36 }, { x: 39.84, y: 47.36 },
|
|
93
|
+
{ x: 39.42, y: 47.56 }, { x: 39.42, y: 47.76 }, { x: 39.01, y: 47.96 },
|
|
94
|
+
{ x: 38.80, y: 48.16 }, { x: 38.59, y: 48.16 }, { x: 38.38, y: 48.56 },
|
|
95
|
+
{ x: 38.17, y: 48.76 }, { x: 37.96, y: 48.76 }, { x: 37.96, y: 48.96 },
|
|
96
|
+
{ x: 37.75, y: 49.16 }, { x: 37.54, y: 49.36 }, { x: 37.33, y: 49.36 },
|
|
97
|
+
{ x: 37.12, y: 49.76 }, { x: 36.91, y: 49.96 }, { x: 36.70, y: 50.16 },
|
|
98
|
+
{ x: 36.49, y: 50.16 }, { x: 36.28, y: 50.36 }, { x: 36.07, y: 50.56 },
|
|
99
|
+
{ x: 35.87, y: 50.56 }, { x: 35.87, y: 50.76 }, { x: 35.66, y: 50.76 },
|
|
100
|
+
{ x: 35.45, y: 50.76 }, { x: 35.24, y: 51.16 }, { x: 35.03, y: 51.16 },
|
|
101
|
+
{ x: 34.82, y: 51.56 }, { x: 34.40, y: 51.76 }, { x: 34.19, y: 51.76 },
|
|
102
|
+
{ x: 33.98, y: 52.16 }, { x: 33.98, y: 52.36 }, { x: 33.77, y: 52.56 },
|
|
103
|
+
{ x: 33.56, y: 52.56 }, { x: 33.56, y: 52.96 }, { x: 33.56, y: 53.16 },
|
|
104
|
+
{ x: 33.35, y: 53.16 }, { x: 33.35, y: 53.36 }, { x: 33.35, y: 53.56 },
|
|
105
|
+
{ x: 33.14, y: 53.96 }, { x: 32.93, y: 54.16 }, { x: 32.93, y: 54.36 },
|
|
106
|
+
{ x: 32.93, y: 54.56 }, { x: 32.93, y: 54.76 }, { x: 32.93, y: 55.16 },
|
|
107
|
+
{ x: 32.72, y: 55.36 }, { x: 32.72, y: 55.76 }, { x: 32.72, y: 55.96 },
|
|
108
|
+
{ x: 32.51, y: 56.36 }, { x: 32.51, y: 56.56 }, { x: 32.51, y: 56.76 },
|
|
109
|
+
{ x: 32.51, y: 57.16 }, { x: 32.51, y: 57.36 }, { x: 32.51, y: 57.56 },
|
|
110
|
+
{ x: 32.51, y: 57.76 }, { x: 32.51, y: 57.96 }, { x: 32.51, y: 58.16 },
|
|
111
|
+
{ x: 32.51, y: 58.36 }, { x: 32.51, y: 58.76 }, { x: 32.51, y: 59.16 },
|
|
112
|
+
{ x: 32.51, y: 59.36 }, { x: 32.51, y: 59.56 }, { x: 32.51, y: 59.76 },
|
|
113
|
+
{ x: 32.51, y: 59.96 }, { x: 32.51, y: 60.16 }, { x: 32.51, y: 60.36 },
|
|
114
|
+
{ x: 32.51, y: 60.56 }, { x: 32.51, y: 60.76 }, { x: 32.51, y: 60.96 },
|
|
115
|
+
{ x: 32.51, y: 61.16 }, { x: 32.51, y: 61.36 }, { x: 32.51, y: 61.56 },
|
|
116
|
+
{ x: 32.72, y: 61.76 }, { x: 32.93, y: 62.16 }, { x: 32.93, y: 62.36 },
|
|
117
|
+
{ x: 32.93, y: 62.56 }, { x: 33.14, y: 62.56 }, { x: 33.14, y: 62.76 },
|
|
118
|
+
{ x: 33.14, y: 62.96 }, { x: 33.35, y: 63.16 }, { x: 33.35, y: 63.56 },
|
|
119
|
+
{ x: 33.56, y: 63.76 }, { x: 33.98, y: 63.96 }, { x: 34.19, y: 64.36 },
|
|
120
|
+
{ x: 34.19, y: 64.56 }, { x: 34.19, y: 64.76 }, { x: 34.61, y: 65.16 },
|
|
121
|
+
{ x: 34.61, y: 65.36 }, { x: 34.82, y: 65.56 }, { x: 35.03, y: 65.56 },
|
|
122
|
+
{ x: 35.03, y: 65.76 }, { x: 35.03, y: 65.96 }, { x: 35.24, y: 66.16 },
|
|
123
|
+
{ x: 35.45, y: 66.36 }, { x: 35.45, y: 66.56 }, { x: 35.66, y: 66.76 },
|
|
124
|
+
{ x: 35.87, y: 66.96 }, { x: 36.07, y: 67.16 }, { x: 36.28, y: 67.36 },
|
|
125
|
+
{ x: 36.49, y: 67.56 }, { x: 36.70, y: 67.76 }, { x: 36.91, y: 67.76 },
|
|
126
|
+
{ x: 37.12, y: 68.16 }, { x: 37.54, y: 68.36 }, { x: 37.75, y: 68.56 },
|
|
127
|
+
{ x: 37.96, y: 68.76 }, { x: 38.17, y: 68.96 }, { x: 38.38, y: 69.16 },
|
|
128
|
+
{ x: 38.59, y: 69.36 }, { x: 39.01, y: 69.56 }, { x: 39.42, y: 69.56 },
|
|
129
|
+
{ x: 39.63, y: 69.76 }, { x: 39.84, y: 69.76 }, { x: 40.05, y: 69.76 },
|
|
130
|
+
{ x: 40.47, y: 69.76 }, { x: 40.68, y: 69.96 }, { x: 41.10, y: 69.96 },
|
|
131
|
+
{ x: 41.31, y: 69.96 }, { x: 41.31, y: 70.16 }, { x: 41.52, y: 70.16 },
|
|
132
|
+
{ x: 41.73, y: 70.36 }, { x: 41.94, y: 70.36 }, { x: 42.15, y: 70.56 },
|
|
133
|
+
{ x: 42.36, y: 70.56 }, { x: 42.57, y: 70.76 }, { x: 42.78, y: 70.76 },
|
|
134
|
+
{ x: 42.98, y: 70.76 }, { x: 43.19, y: 70.76 }, { x: 43.40, y: 70.76 },
|
|
135
|
+
{ x: 43.61, y: 70.76 }, { x: 44.03, y: 70.76 }, { x: 44.45, y: 70.76 },
|
|
136
|
+
{ x: 44.66, y: 70.76 }, { x: 44.87, y: 70.76 }, { x: 45.08, y: 70.76 },
|
|
137
|
+
{ x: 45.29, y: 70.76 }, { x: 45.50, y: 70.76 }, { x: 45.92, y: 70.76 },
|
|
138
|
+
{ x: 46.13, y: 70.76 }, { x: 46.34, y: 70.76 }, { x: 46.54, y: 70.76 },
|
|
139
|
+
{ x: 46.75, y: 70.76 }, { x: 46.96, y: 70.76 }, { x: 47.17, y: 70.76 },
|
|
140
|
+
{ x: 47.80, y: 70.56 }, { x: 47.80, y: 70.36 }, { x: 48.01, y: 70.36 },
|
|
141
|
+
{ x: 48.22, y: 70.36 }, { x: 48.43, y: 70.36 }, { x: 48.85, y: 70.16 },
|
|
142
|
+
{ x: 49.06, y: 70.16 }, { x: 49.06, y: 69.96 }, { x: 49.27, y: 69.96 },
|
|
143
|
+
{ x: 49.48, y: 69.76 }, { x: 49.69, y: 69.76 }, { x: 49.90, y: 69.56 },
|
|
144
|
+
{ x: 50.10, y: 69.56 }, { x: 50.52, y: 69.56 }, { x: 50.73, y: 69.16 },
|
|
145
|
+
{ x: 50.94, y: 69.16 }, { x: 51.15, y: 68.96 }, { x: 51.36, y: 68.96 },
|
|
146
|
+
{ x: 51.78, y: 68.76 }, { x: 51.78, y: 68.56 }, { x: 51.99, y: 68.36 },
|
|
147
|
+
{ x: 51.99, y: 68.16 }, { x: 52.20, y: 67.76 }, { x: 52.41, y: 67.76 },
|
|
148
|
+
{ x: 52.41, y: 67.56 }, { x: 52.62, y: 67.16 }, { x: 52.83, y: 66.96 },
|
|
149
|
+
{ x: 53.04, y: 66.96 }, { x: 53.04, y: 66.76 }, { x: 53.25, y: 66.76 },
|
|
150
|
+
{ x: 53.46, y: 66.56 }, { x: 53.66, y: 66.36 }, { x: 53.66, y: 66.16 },
|
|
151
|
+
{ x: 53.87, y: 65.96 }, { x: 54.08, y: 65.96 }, { x: 54.29, y: 65.96 },
|
|
152
|
+
{ x: 54.29, y: 65.76 }, { x: 54.50, y: 65.56 }, { x: 54.50, y: 65.36 },
|
|
153
|
+
{ x: 54.71, y: 65.36 }, { x: 54.71, y: 65.16 }, { x: 54.92, y: 64.76 },
|
|
154
|
+
{ x: 54.92, y: 64.56 }, { x: 54.92, y: 64.36 }, { x: 55.13, y: 64.36 },
|
|
155
|
+
{ x: 55.13, y: 64.16 }, { x: 55.13, y: 63.96 }, { x: 55.13, y: 63.76 },
|
|
156
|
+
{ x: 55.13, y: 63.56 }, { x: 55.13, y: 63.36 }, { x: 55.34, y: 63.16 },
|
|
157
|
+
{ x: 55.34, y: 62.96 }, { x: 55.55, y: 62.56 }, { x: 55.55, y: 62.36 },
|
|
158
|
+
{ x: 55.76, y: 62.16 }, { x: 55.76, y: 61.96 }, { x: 55.76, y: 61.76 },
|
|
159
|
+
{ x: 55.76, y: 61.56 }, { x: 55.76, y: 61.36 }, { x: 55.76, y: 61.16 },
|
|
160
|
+
{ x: 55.76, y: 60.96 }, { x: 55.76, y: 60.76 }, { x: 55.76, y: 60.56 },
|
|
161
|
+
{ x: 55.76, y: 60.36 }, { x: 55.97, y: 60.16 }, { x: 55.97, y: 59.96 },
|
|
162
|
+
{ x: 55.97, y: 59.76 }, { x: 55.97, y: 59.56 }, { x: 55.97, y: 59.36 },
|
|
163
|
+
{ x: 55.97, y: 59.16 }, { x: 55.97, y: 58.96 }, { x: 55.97, y: 58.76 },
|
|
164
|
+
{ x: 55.97, y: 58.56 }, { x: 55.97, y: 58.36 }, { x: 55.97, y: 58.16 },
|
|
165
|
+
{ x: 55.97, y: 57.96 }, { x: 55.97, y: 57.76 }, { x: 55.97, y: 57.56 },
|
|
166
|
+
{ x: 55.97, y: 57.36 }, { x: 55.97, y: 57.16 }, { x: 55.97, y: 56.96 },
|
|
167
|
+
{ x: 55.97, y: 56.56 }, { x: 55.97, y: 56.36 }, { x: 55.97, y: 56.16 },
|
|
168
|
+
{ x: 55.97, y: 55.96 }, { x: 55.76, y: 55.76 }, { x: 55.76, y: 55.56 },
|
|
169
|
+
{ x: 55.76, y: 55.36 }, { x: 55.76, y: 55.16 }, { x: 55.76, y: 54.96 },
|
|
170
|
+
{ x: 55.55, y: 54.96 }, { x: 55.55, y: 54.76 }, { x: 55.55, y: 54.56 },
|
|
171
|
+
{ x: 55.55, y: 54.36 }, { x: 55.55, y: 54.16 }, { x: 55.55, y: 53.96 },
|
|
172
|
+
{ x: 55.55, y: 53.76 }, { x: 55.55, y: 53.56 }, { x: 55.55, y: 53.36 },
|
|
173
|
+
{ x: 55.34, y: 53.36 }, { x: 55.13, y: 53.16 }, { x: 55.13, y: 52.96 },
|
|
174
|
+
{ x: 55.13, y: 52.76 }, { x: 55.13, y: 52.56 }, { x: 55.13, y: 52.16 },
|
|
175
|
+
{ x: 54.92, y: 52.16 }, { x: 54.92, y: 51.96 }, { x: 54.71, y: 51.96 },
|
|
176
|
+
{ x: 54.50, y: 51.56 }, { x: 54.29, y: 51.36 }, { x: 54.29, y: 51.16 },
|
|
177
|
+
{ x: 54.08, y: 50.96 }, { x: 53.87, y: 50.76 }, { x: 53.66, y: 50.56 },
|
|
178
|
+
{ x: 53.66, y: 50.36 }, { x: 53.46, y: 50.16 }, { x: 53.25, y: 49.96 },
|
|
179
|
+
{ x: 52.83, y: 49.76 }, { x: 52.62, y: 49.76 }, { x: 52.41, y: 49.56 },
|
|
180
|
+
{ x: 52.20, y: 49.36 }, { x: 52.20, y: 49.16 }, { x: 51.99, y: 49.16 },
|
|
181
|
+
{ x: 51.99, y: 48.96 }, { x: 51.78, y: 48.96 }, { x: 51.57, y: 48.76 },
|
|
182
|
+
{ x: 51.15, y: 48.56 }, { x: 50.94, y: 48.56 }, { x: 50.73, y: 48.56 },
|
|
183
|
+
{ x: 50.73, y: 48.36 }, { x: 50.52, y: 48.36 }, { x: 50.31, y: 48.36 },
|
|
184
|
+
{ x: 50.10, y: 48.36 }, { x: 49.90, y: 48.16 }, { x: 49.90, y: 47.96 },
|
|
185
|
+
{ x: 49.48, y: 47.96 }, { x: 49.27, y: 47.76 }, { x: 49.27, y: 47.36 },
|
|
186
|
+
{ x: 49.06, y: 47.36 },
|
|
187
|
+
],
|
|
188
|
+
right: [
|
|
189
|
+
{ x: 81.31, y: 41.96 }, { x: 81.10, y: 41.96 }, { x: 81.10, y: 42.16 },
|
|
190
|
+
{ x: 80.89, y: 42.16 }, { x: 80.47, y: 42.16 }, { x: 80.26, y: 42.16 },
|
|
191
|
+
{ x: 80.26, y: 42.36 }, { x: 80.05, y: 42.36 }, { x: 79.84, y: 42.36 },
|
|
192
|
+
{ x: 79.63, y: 42.36 }, { x: 79.42, y: 42.36 }, { x: 79.21, y: 42.56 },
|
|
193
|
+
{ x: 79.21, y: 42.76 }, { x: 78.79, y: 42.76 }, { x: 78.79, y: 42.96 },
|
|
194
|
+
{ x: 78.58, y: 43.36 }, { x: 78.37, y: 43.36 }, { x: 78.17, y: 43.56 },
|
|
195
|
+
{ x: 77.96, y: 43.76 }, { x: 77.75, y: 43.96 }, { x: 77.75, y: 44.16 },
|
|
196
|
+
{ x: 77.54, y: 44.16 }, { x: 77.33, y: 44.16 }, { x: 77.12, y: 44.56 },
|
|
197
|
+
{ x: 76.91, y: 44.56 }, { x: 76.91, y: 44.76 }, { x: 76.70, y: 44.76 },
|
|
198
|
+
{ x: 76.49, y: 44.96 }, { x: 76.28, y: 45.16 }, { x: 76.07, y: 45.36 },
|
|
199
|
+
{ x: 75.86, y: 45.76 }, { x: 75.65, y: 45.96 }, { x: 75.65, y: 46.16 },
|
|
200
|
+
{ x: 75.44, y: 46.16 }, { x: 75.02, y: 46.36 }, { x: 74.81, y: 46.56 },
|
|
201
|
+
{ x: 74.61, y: 46.56 }, { x: 74.40, y: 46.96 }, { x: 74.19, y: 47.16 },
|
|
202
|
+
{ x: 73.98, y: 47.56 }, { x: 73.77, y: 47.96 }, { x: 73.77, y: 48.16 },
|
|
203
|
+
{ x: 73.56, y: 48.56 }, { x: 73.56, y: 48.76 }, { x: 73.56, y: 48.96 },
|
|
204
|
+
{ x: 73.56, y: 49.16 }, { x: 73.56, y: 49.36 }, { x: 73.35, y: 49.56 },
|
|
205
|
+
{ x: 73.35, y: 49.76 }, { x: 73.35, y: 49.96 }, { x: 73.35, y: 50.16 },
|
|
206
|
+
{ x: 73.35, y: 50.36 }, { x: 73.35, y: 50.56 }, { x: 73.35, y: 50.76 },
|
|
207
|
+
{ x: 73.35, y: 50.96 }, { x: 73.14, y: 51.36 }, { x: 73.14, y: 51.56 },
|
|
208
|
+
{ x: 73.14, y: 51.76 }, { x: 73.14, y: 51.96 }, { x: 73.14, y: 52.16 },
|
|
209
|
+
{ x: 73.14, y: 52.36 }, { x: 73.14, y: 52.56 }, { x: 73.14, y: 52.76 },
|
|
210
|
+
{ x: 73.14, y: 52.96 }, { x: 73.14, y: 53.16 }, { x: 73.14, y: 53.36 },
|
|
211
|
+
{ x: 73.14, y: 53.56 }, { x: 73.35, y: 53.96 }, { x: 73.35, y: 54.36 },
|
|
212
|
+
{ x: 73.35, y: 54.76 }, { x: 73.35, y: 54.96 }, { x: 73.35, y: 55.16 },
|
|
213
|
+
{ x: 73.35, y: 55.36 }, { x: 73.35, y: 55.56 }, { x: 73.35, y: 55.76 },
|
|
214
|
+
{ x: 73.35, y: 55.96 }, { x: 73.35, y: 56.16 }, { x: 73.35, y: 56.36 },
|
|
215
|
+
{ x: 73.35, y: 56.56 }, { x: 73.35, y: 56.76 }, { x: 73.35, y: 56.96 },
|
|
216
|
+
{ x: 73.35, y: 57.16 }, { x: 73.35, y: 57.36 }, { x: 73.56, y: 57.56 },
|
|
217
|
+
{ x: 73.56, y: 57.76 }, { x: 73.56, y: 57.96 }, { x: 73.56, y: 58.16 },
|
|
218
|
+
{ x: 73.56, y: 58.36 }, { x: 73.77, y: 58.76 }, { x: 73.77, y: 58.96 },
|
|
219
|
+
{ x: 73.77, y: 59.16 }, { x: 73.98, y: 59.56 }, { x: 74.19, y: 59.76 },
|
|
220
|
+
{ x: 74.19, y: 60.16 }, { x: 74.40, y: 60.36 }, { x: 74.61, y: 60.36 },
|
|
221
|
+
{ x: 74.61, y: 60.56 }, { x: 74.81, y: 60.76 }, { x: 74.81, y: 60.96 },
|
|
222
|
+
{ x: 74.81, y: 61.16 }, { x: 75.02, y: 61.36 }, { x: 75.23, y: 61.76 },
|
|
223
|
+
{ x: 75.44, y: 61.96 }, { x: 75.65, y: 62.36 }, { x: 75.65, y: 62.56 },
|
|
224
|
+
{ x: 75.86, y: 62.76 }, { x: 76.07, y: 62.76 }, { x: 76.28, y: 63.16 },
|
|
225
|
+
{ x: 76.49, y: 63.36 }, { x: 76.70, y: 63.36 }, { x: 76.91, y: 63.56 },
|
|
226
|
+
{ x: 77.12, y: 63.56 }, { x: 77.33, y: 63.76 }, { x: 77.33, y: 63.96 },
|
|
227
|
+
{ x: 77.54, y: 63.96 }, { x: 77.54, y: 64.16 }, { x: 77.96, y: 64.16 },
|
|
228
|
+
{ x: 78.17, y: 64.36 }, { x: 78.37, y: 64.56 }, { x: 78.58, y: 64.76 },
|
|
229
|
+
{ x: 78.79, y: 64.96 }, { x: 79.00, y: 65.16 }, { x: 79.21, y: 65.16 },
|
|
230
|
+
{ x: 79.21, y: 65.36 }, { x: 79.63, y: 65.56 }, { x: 79.84, y: 65.56 },
|
|
231
|
+
{ x: 80.26, y: 65.76 }, { x: 80.47, y: 65.76 }, { x: 80.68, y: 65.96 },
|
|
232
|
+
{ x: 80.89, y: 65.96 }, { x: 81.10, y: 65.96 }, { x: 81.31, y: 65.96 },
|
|
233
|
+
{ x: 81.52, y: 65.96 }, { x: 81.93, y: 66.16 }, { x: 82.14, y: 66.16 },
|
|
234
|
+
{ x: 82.35, y: 66.16 }, { x: 82.56, y: 66.16 }, { x: 82.77, y: 66.16 },
|
|
235
|
+
{ x: 82.98, y: 66.16 }, { x: 83.19, y: 66.16 }, { x: 83.40, y: 66.16 },
|
|
236
|
+
{ x: 83.61, y: 66.16 }, { x: 84.03, y: 66.16 }, { x: 84.24, y: 66.16 },
|
|
237
|
+
{ x: 84.66, y: 65.96 }, { x: 84.87, y: 65.76 }, { x: 85.29, y: 65.56 },
|
|
238
|
+
{ x: 85.70, y: 65.36 }, { x: 85.91, y: 65.36 }, { x: 86.12, y: 65.16 },
|
|
239
|
+
{ x: 86.33, y: 65.16 }, { x: 86.54, y: 65.16 }, { x: 86.75, y: 64.96 },
|
|
240
|
+
{ x: 86.75, y: 64.76 }, { x: 86.96, y: 64.76 }, { x: 87.17, y: 64.56 },
|
|
241
|
+
{ x: 87.17, y: 64.36 }, { x: 87.17, y: 64.16 }, { x: 87.38, y: 64.16 },
|
|
242
|
+
{ x: 87.59, y: 63.96 }, { x: 87.59, y: 63.76 }, { x: 87.80, y: 63.56 },
|
|
243
|
+
{ x: 88.01, y: 63.36 }, { x: 88.22, y: 63.16 }, { x: 88.43, y: 62.96 },
|
|
244
|
+
{ x: 88.43, y: 62.76 }, { x: 88.43, y: 62.56 }, { x: 88.64, y: 62.36 },
|
|
245
|
+
{ x: 88.64, y: 62.16 }, { x: 88.64, y: 61.76 }, { x: 88.84, y: 61.56 },
|
|
246
|
+
{ x: 88.84, y: 61.36 }, { x: 88.84, y: 61.16 }, { x: 89.05, y: 60.96 },
|
|
247
|
+
{ x: 89.05, y: 60.76 }, { x: 89.05, y: 60.56 }, { x: 89.05, y: 60.36 },
|
|
248
|
+
{ x: 89.05, y: 60.16 }, { x: 89.26, y: 59.96 }, { x: 89.47, y: 59.76 },
|
|
249
|
+
{ x: 89.47, y: 59.56 }, { x: 89.68, y: 59.16 }, { x: 89.68, y: 58.96 },
|
|
250
|
+
{ x: 89.68, y: 58.56 }, { x: 89.68, y: 58.36 }, { x: 89.68, y: 57.96 },
|
|
251
|
+
{ x: 89.68, y: 57.76 }, { x: 89.89, y: 57.56 }, { x: 90.10, y: 57.36 },
|
|
252
|
+
{ x: 90.10, y: 57.16 }, { x: 90.10, y: 56.76 }, { x: 90.10, y: 56.56 },
|
|
253
|
+
{ x: 90.10, y: 56.36 }, { x: 90.10, y: 56.16 }, { x: 90.31, y: 55.96 },
|
|
254
|
+
{ x: 90.52, y: 55.76 }, { x: 90.52, y: 55.36 }, { x: 90.52, y: 55.16 },
|
|
255
|
+
{ x: 90.52, y: 54.96 }, { x: 90.52, y: 54.76 }, { x: 90.52, y: 54.56 },
|
|
256
|
+
{ x: 90.52, y: 54.36 }, { x: 90.73, y: 54.16 }, { x: 90.73, y: 53.96 },
|
|
257
|
+
{ x: 90.73, y: 53.76 }, { x: 90.73, y: 53.36 }, { x: 90.73, y: 53.16 },
|
|
258
|
+
{ x: 90.73, y: 52.96 }, { x: 90.73, y: 52.76 }, { x: 90.73, y: 52.56 },
|
|
259
|
+
{ x: 90.73, y: 52.36 }, { x: 90.73, y: 52.16 }, { x: 90.73, y: 51.96 },
|
|
260
|
+
{ x: 90.73, y: 51.76 }, { x: 90.52, y: 51.36 }, { x: 90.52, y: 50.96 },
|
|
261
|
+
{ x: 90.31, y: 50.96 }, { x: 90.31, y: 50.76 }, { x: 90.31, y: 50.56 },
|
|
262
|
+
{ x: 90.31, y: 50.36 }, { x: 90.31, y: 50.16 }, { x: 90.31, y: 49.96 },
|
|
263
|
+
{ x: 90.31, y: 49.76 }, { x: 90.31, y: 49.36 }, { x: 90.31, y: 49.16 },
|
|
264
|
+
{ x: 90.31, y: 48.96 }, { x: 90.10, y: 48.56 }, { x: 90.10, y: 48.36 },
|
|
265
|
+
{ x: 89.89, y: 48.16 }, { x: 89.89, y: 47.96 }, { x: 89.89, y: 47.76 },
|
|
266
|
+
{ x: 89.68, y: 47.76 }, { x: 89.47, y: 47.56 }, { x: 89.26, y: 47.56 },
|
|
267
|
+
{ x: 89.26, y: 47.36 }, { x: 89.05, y: 47.16 }, { x: 88.84, y: 47.16 },
|
|
268
|
+
{ x: 88.84, y: 46.96 }, { x: 88.64, y: 46.56 }, { x: 88.43, y: 46.56 },
|
|
269
|
+
{ x: 88.43, y: 46.36 }, { x: 88.22, y: 46.16 }, { x: 88.01, y: 45.96 },
|
|
270
|
+
{ x: 87.80, y: 45.96 }, { x: 87.59, y: 45.76 }, { x: 87.38, y: 45.76 },
|
|
271
|
+
{ x: 87.38, y: 45.56 }, { x: 87.17, y: 45.16 }, { x: 86.96, y: 45.16 },
|
|
272
|
+
{ x: 86.96, y: 44.96 }, { x: 86.75, y: 44.96 }, { x: 86.54, y: 44.76 },
|
|
273
|
+
{ x: 86.33, y: 44.76 }, { x: 86.12, y: 44.56 }, { x: 86.12, y: 44.36 },
|
|
274
|
+
{ x: 85.91, y: 44.36 }, { x: 85.70, y: 44.36 }, { x: 85.49, y: 44.16 },
|
|
275
|
+
{ x: 85.49, y: 43.96 }, { x: 85.29, y: 43.96 }, { x: 85.08, y: 43.76 },
|
|
276
|
+
{ x: 84.66, y: 43.56 }, { x: 84.45, y: 43.36 }, { x: 84.45, y: 43.16 },
|
|
277
|
+
{ x: 84.24, y: 42.96 }, { x: 84.03, y: 42.96 }, { x: 83.82, y: 42.76 },
|
|
278
|
+
{ x: 83.61, y: 42.56 }, { x: 83.40, y: 42.56 }, { x: 83.19, y: 42.56 },
|
|
279
|
+
{ x: 82.98, y: 42.56 }, { x: 82.77, y: 42.56 }, { x: 82.56, y: 42.56 },
|
|
280
|
+
{ x: 82.35, y: 42.56 },
|
|
281
|
+
],
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Simulate what Body.update() does when auto mode is active:
|
|
285
|
+
* • Pass wall-clock time (t)
|
|
286
|
+
* • Always pass isPlaying=true
|
|
287
|
+
*
|
|
288
|
+
* Runs N frames at 60 fps and returns every distinct iris position seen.
|
|
289
|
+
*/
|
|
290
|
+
function simulateAutoFrames(sys, frames) {
|
|
291
|
+
const seen = new Set();
|
|
292
|
+
// Start from a large wall-clock value (≫ 0.1) so the startup window is never entered.
|
|
293
|
+
// This matches real usage where Date.now()/1000 is ~ 1.7 billion seconds.
|
|
294
|
+
let t = 1700000000;
|
|
295
|
+
for (let i = 0; i < frames; i++) {
|
|
296
|
+
sys.update(t, /*isPlaying=*/ true);
|
|
297
|
+
const p = sys.getIrisPositions();
|
|
298
|
+
seen.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
|
|
299
|
+
t += 1 / 60;
|
|
300
|
+
}
|
|
301
|
+
return seen;
|
|
302
|
+
}
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
// 1. Iris moves at all during auto playback
|
|
305
|
+
// Run 300 frames (5 s at 60 fps). With 50 % chance per 0.75 s interval
|
|
306
|
+
// the probability of zero moves in 5 s is ≈ (0.5)^6 < 2 %.
|
|
307
|
+
// We use 900 frames (15 s) → (0.5)^20 < 0.0001 % — statistically certain.
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
console.log('\n--- Test 1: iris moves during 15 s of auto playback ---');
|
|
310
|
+
{
|
|
311
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
312
|
+
const basePos = sys.getIrisPositions();
|
|
313
|
+
const visited = simulateAutoFrames(sys, /*frames=*/ 900);
|
|
314
|
+
assert(visited.size > 1, `Iris visited ${visited.size} distinct position(s) across 900 frames ` +
|
|
315
|
+
`(expected > 1); auto movement is working`);
|
|
316
|
+
// At least one visited position must differ from the base coords
|
|
317
|
+
const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
|
|
318
|
+
const movedAwayFromBase = [...visited].some(k => k !== baseKey);
|
|
319
|
+
assert(movedAwayFromBase, 'At least one frame had an iris position different from the base coordinates');
|
|
320
|
+
}
|
|
321
|
+
// ---------------------------------------------------------------------------
|
|
322
|
+
// 2. Movement fires within the first 1.5 s (at most two 0.75 s intervals)
|
|
323
|
+
// We run exactly 90 frames (1.5 s) and check that at least one non-base
|
|
324
|
+
// position was recorded. Probability of failure ≈ (0.5^2) × (8/9)^2 ≈ 7 %.
|
|
325
|
+
// To make this reliable we run 180 frames (3 s) → prob ≈ (0.5^4)×… < 1 %.
|
|
326
|
+
// ---------------------------------------------------------------------------
|
|
327
|
+
console.log('\n--- Test 2: movement fires within 3 s ---');
|
|
328
|
+
{
|
|
329
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
330
|
+
const basePos = sys.getIrisPositions();
|
|
331
|
+
const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
|
|
332
|
+
let t = 1700000000;
|
|
333
|
+
let movedByFrame = -1;
|
|
334
|
+
for (let i = 0; i < 180; i++) {
|
|
335
|
+
sys.update(t, true);
|
|
336
|
+
const p = sys.getIrisPositions();
|
|
337
|
+
const key = `${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`;
|
|
338
|
+
if (key !== baseKey && movedByFrame < 0) {
|
|
339
|
+
movedByFrame = i;
|
|
340
|
+
}
|
|
341
|
+
t += 1 / 60;
|
|
342
|
+
}
|
|
343
|
+
assert(movedByFrame >= 0, `Iris first moved at frame ${movedByFrame} (≈ ${(movedByFrame / 60).toFixed(2)} s) — ` +
|
|
344
|
+
`movement fires within 3 s`);
|
|
345
|
+
if (movedByFrame >= 0) {
|
|
346
|
+
const movedAtSeconds = movedByFrame / 60;
|
|
347
|
+
// Movement should fire within 2 × eyeUpdateInterval (= 2 × 0.75 = 1.5 s max)
|
|
348
|
+
// plus a small tolerance for the random gate (50 % chance each tick)
|
|
349
|
+
assert(movedAtSeconds <= 2.0, `First movement at ${movedAtSeconds.toFixed(2)} s ≤ 2.0 s (within 2 wander intervals)`);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// ---------------------------------------------------------------------------
|
|
353
|
+
// 3. isPlaying = false → iris NEVER moves (timer-gated)
|
|
354
|
+
// This verifies that the isPlaying guard in eyeSystem.update() is respected.
|
|
355
|
+
// Body.update() passes isPlaying=true for auto mode; this test documents
|
|
356
|
+
// what happens at the eyeSystem level when it receives false.
|
|
357
|
+
// ---------------------------------------------------------------------------
|
|
358
|
+
console.log('\n--- Test 3: isPlaying=false → no iris movement ---');
|
|
359
|
+
{
|
|
360
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
361
|
+
const basePos = sys.getIrisPositions();
|
|
362
|
+
const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
|
|
363
|
+
// Run 600 frames with isPlaying=false — the guard should prevent all movement
|
|
364
|
+
let t = 1700000000;
|
|
365
|
+
for (let i = 0; i < 600; i++) {
|
|
366
|
+
sys.update(t, /*isPlaying=*/ false);
|
|
367
|
+
t += 1 / 60;
|
|
368
|
+
}
|
|
369
|
+
const finalPos = sys.getIrisPositions();
|
|
370
|
+
const finalKey = `${finalPos.left.x.toFixed(4)},${finalPos.left.y.toFixed(4)}`;
|
|
371
|
+
assert(finalKey === baseKey, 'With isPlaying=false the iris must not move (eye movement is time-gated by isPlaying)');
|
|
372
|
+
}
|
|
373
|
+
// ---------------------------------------------------------------------------
|
|
374
|
+
// 4. Body.update() passes isPlaying=true → same system used in App does move
|
|
375
|
+
// This is the closest test to the actual in-app behaviour:
|
|
376
|
+
// Body.update() calls eyeSystem.update(Date.now()/1000, true, ...)
|
|
377
|
+
// We replicate exactly that call sequence here.
|
|
378
|
+
// ---------------------------------------------------------------------------
|
|
379
|
+
console.log('\n--- Test 4: simulating Body.update() wall-clock call sequence ---');
|
|
380
|
+
{
|
|
381
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
382
|
+
const visited = new Set();
|
|
383
|
+
// Replicate what Body.update() does on every render frame:
|
|
384
|
+
// const wallTime = Date.now() / 1000;
|
|
385
|
+
// eyeSystem.update(wallTime, true, null, { x: 0, y: 0 });
|
|
386
|
+
const startRealMs = Date.now();
|
|
387
|
+
// Run for 2000 ms to get at least 2 movement opportunities (each 0.75 s).
|
|
388
|
+
// 600 ms was flaky: a single "center" roll kept the iris stationary.
|
|
389
|
+
while (Date.now() - startRealMs < 2000) {
|
|
390
|
+
const wallTime = Date.now() / 1000;
|
|
391
|
+
sys.update(wallTime, /*isPlaying=*/ true);
|
|
392
|
+
const p = sys.getIrisPositions();
|
|
393
|
+
visited.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
|
|
394
|
+
// Simulate 60 fps frame rate (~16 ms sleep equivalent via busy-wait)
|
|
395
|
+
const frameStart = Date.now();
|
|
396
|
+
while (Date.now() - frameStart < 16) { /* busy wait */ }
|
|
397
|
+
}
|
|
398
|
+
const frames = Math.round((Date.now() - startRealMs) / 16);
|
|
399
|
+
assert(visited.size > 1, `Body.update()-style call over ~600 ms (≈${frames} frames) ` +
|
|
400
|
+
`visited ${visited.size} distinct iris position(s) — movement is live`);
|
|
401
|
+
}
|
|
402
|
+
// ---------------------------------------------------------------------------
|
|
403
|
+
// 5. Manual → auto transition: iris leaves the manually-set position
|
|
404
|
+
// setManualIrisPositions positions iris at max-right, then auto updates
|
|
405
|
+
// drive it to a random direction.
|
|
406
|
+
// ---------------------------------------------------------------------------
|
|
407
|
+
console.log('\n--- Test 5: manual→auto transition produces iris movement ---');
|
|
408
|
+
{
|
|
409
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
410
|
+
// Step 1: simulate manual mode (setManualIrisPositions with max-right = x:2)
|
|
411
|
+
// manualScaleFactor defaults to 2.5, so leftIrisX = baseX + 2*2.5 = 15
|
|
412
|
+
const manualWallTime = 1700000000;
|
|
413
|
+
sys.setManualIrisPositions({ left: { x: 2, y: -1.5 }, right: { x: 2, y: -1.5 } }, manualWallTime);
|
|
414
|
+
const manualPos = sys.getIrisPositions();
|
|
415
|
+
// Step 2: switch to auto — advance wall time by 1 s and run 120 frames
|
|
416
|
+
const visited = new Set();
|
|
417
|
+
const manualKey = `${manualPos.left.x.toFixed(4)},${manualPos.left.y.toFixed(4)}`;
|
|
418
|
+
visited.add(manualKey);
|
|
419
|
+
let t = manualWallTime + 1.0; // 1 s after the manual anchor
|
|
420
|
+
for (let i = 0; i < 180; i++) {
|
|
421
|
+
sys.update(t, /*isPlaying=*/ true);
|
|
422
|
+
const p = sys.getIrisPositions();
|
|
423
|
+
visited.add(`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}`);
|
|
424
|
+
t += 1 / 60;
|
|
425
|
+
}
|
|
426
|
+
assert(visited.size > 1, `After manual→auto transition, iris visited ${visited.size} distinct positions ` +
|
|
427
|
+
`(must be > 1 — manual position is not permanent)`);
|
|
428
|
+
}
|
|
429
|
+
// ---------------------------------------------------------------------------
|
|
430
|
+
// 6. Multiple distinct positions over 10 s → iris genuinely wanders
|
|
431
|
+
// With 9 possible directions × non-trivial probability, we expect ≥ 3
|
|
432
|
+
// distinct positions across 10 s.
|
|
433
|
+
// ---------------------------------------------------------------------------
|
|
434
|
+
console.log('\n--- Test 6: iris visits ≥ 3 distinct positions over 10 s ---');
|
|
435
|
+
{
|
|
436
|
+
const sys = createEyeSystem('char', makeEyes());
|
|
437
|
+
const visited = simulateAutoFrames(sys, /*frames=*/ 600);
|
|
438
|
+
// In 10 s with ~13 movement opportunities (each 0.75 s, 50 % chance),
|
|
439
|
+
// expected movements ≈ 7. Probability of < 3 distinct positions ≈ negligible.
|
|
440
|
+
assert(visited.size >= 3, `Iris visited ${visited.size} distinct position(s) across 600 frames (10 s); ` +
|
|
441
|
+
`expected ≥ 3 for genuine wandering`);
|
|
442
|
+
}
|
|
443
|
+
// ===========================================================================
|
|
444
|
+
// TEEN-TANK CHARACTER TESTS (character_rig (7).json)
|
|
445
|
+
// This is the specific character the user reported as having zero iris movement.
|
|
446
|
+
// Root cause: socket-derived movement ranges were clamped to 0 because the iris
|
|
447
|
+
// base dimensions (49×63 px) exceeded the available socket space (~21.5×30.2 px
|
|
448
|
+
// after 50% margin factor and taking the min of both sockets).
|
|
449
|
+
// The fix falls back to DEFAULT_MOVEMENT_RANGES when socket range < 0.5 px.
|
|
450
|
+
// ===========================================================================
|
|
451
|
+
// ---------------------------------------------------------------------------
|
|
452
|
+
// Helper: create the teen-tank EyeSystem with correct API
|
|
453
|
+
// createEyeSystem(id, eyeData, options) — the 3-arg form — correctly routes
|
|
454
|
+
// TEEN_TANK_EYES through to the EyeSystem constructor, unlike the 2-arg options
|
|
455
|
+
// form which is interpreted as rigData (expecting an 'eyes' key, not 'eyeData').
|
|
456
|
+
// ---------------------------------------------------------------------------
|
|
457
|
+
function makeTeenTankSys() {
|
|
458
|
+
return createEyeSystem('teen-tank', TEEN_TANK_EYES, { eyeSockets: TEEN_TANK_EYE_SOCKETS, headWidth: 489, headHeight: 512 });
|
|
459
|
+
}
|
|
460
|
+
// ---------------------------------------------------------------------------
|
|
461
|
+
// 7. Teen-tank iris moves during 15 s of auto playback (with eye sockets)
|
|
462
|
+
//
|
|
463
|
+
// With ratio-scaled iris dimensions correctly accounted for, the socket range
|
|
464
|
+
// after subtraction is negative (iris 134×138 px rendered size > socket
|
|
465
|
+
// ~36×53 px), so the system falls back to DEFAULT_MOVEMENT_RANGES.
|
|
466
|
+
// This means the iris still wanders — verified by > 1 distinct position.
|
|
467
|
+
// ---------------------------------------------------------------------------
|
|
468
|
+
console.log('\n--- Test 7 [teen tank]: iris moves during 15 s of auto playback ---');
|
|
469
|
+
{
|
|
470
|
+
const sys = makeTeenTankSys();
|
|
471
|
+
const basePos = sys.getIrisPositions();
|
|
472
|
+
const visited = simulateAutoFrames(sys, /*frames=*/ 900); // 15 s at 60 fps
|
|
473
|
+
assert(visited.size > 1, `[teen tank] Iris visited ${visited.size} distinct position(s) across 900 frames — ` +
|
|
474
|
+
`expected > 1; zero means movement ranges were clamped to 0 with no fallback`);
|
|
475
|
+
const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
|
|
476
|
+
const movedAwayFromBase = [...visited].some(k => k !== baseKey);
|
|
477
|
+
assert(movedAwayFromBase, '[teen tank] At least one frame had an iris position different from the base coords');
|
|
478
|
+
}
|
|
479
|
+
// ---------------------------------------------------------------------------
|
|
480
|
+
// 8. Teen-tank iris moves within 3 s (first movement fires promptly)
|
|
481
|
+
// ---------------------------------------------------------------------------
|
|
482
|
+
console.log('\n--- Test 8 [teen tank]: movement fires within 3 s ---');
|
|
483
|
+
{
|
|
484
|
+
const sys = makeTeenTankSys();
|
|
485
|
+
const basePos = sys.getIrisPositions();
|
|
486
|
+
const baseKey = `${basePos.left.x.toFixed(4)},${basePos.left.y.toFixed(4)}`;
|
|
487
|
+
let t = 1700000000;
|
|
488
|
+
let movedByFrame = -1;
|
|
489
|
+
for (let i = 0; i < 180; i++) { // 3 s at 60 fps
|
|
490
|
+
sys.update(t, /*isPlaying=*/ true);
|
|
491
|
+
const p = sys.getIrisPositions();
|
|
492
|
+
if (`${p.left.x.toFixed(4)},${p.left.y.toFixed(4)}` !== baseKey && movedByFrame < 0) {
|
|
493
|
+
movedByFrame = i;
|
|
494
|
+
}
|
|
495
|
+
t += 1 / 60;
|
|
496
|
+
}
|
|
497
|
+
assert(movedByFrame >= 0, `[teen tank] Iris first moved at frame ${movedByFrame} (≈${(movedByFrame / 60).toFixed(2)} s) ` +
|
|
498
|
+
`— movement fires within 3 s`);
|
|
499
|
+
if (movedByFrame >= 0) {
|
|
500
|
+
assert(movedByFrame / 60 <= 2.0, `[teen tank] First movement at ${(movedByFrame / 60).toFixed(2)} s ≤ 2.0 s`);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
// ---------------------------------------------------------------------------
|
|
504
|
+
// 9. Teen-tank: simulated Body.update() call sequence (15 s) produces movement
|
|
505
|
+
// ---------------------------------------------------------------------------
|
|
506
|
+
console.log('\n--- Test 9 [teen tank]: simulated Body.update() over 15 s produces movement ---');
|
|
507
|
+
{
|
|
508
|
+
const sys = makeTeenTankSys();
|
|
509
|
+
const visited = simulateAutoFrames(sys, /*frames=*/ 900); // 15 s at 60 fps
|
|
510
|
+
assert(visited.size > 1, `[teen tank] Body.update()-style simulation over 15 s visited ${visited.size} ` +
|
|
511
|
+
`distinct iris position(s) — must be > 1`);
|
|
512
|
+
}
|
|
513
|
+
printSummary();
|
|
514
|
+
//# sourceMappingURL=test-auto-eye-movement-e2e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-auto-eye-movement-e2e.js","sourceRoot":"","sources":["../../tests/test-auto-eye-movement-e2e.ts"],"names":[],"mappings":"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,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;KACzB;IACD,KAAK,EAAE;QACH,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE;QACtE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,K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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EyeSystem resetTiming guard tests
|
|
3
|
+
*
|
|
4
|
+
* Guards against the regression where update() called resetTiming() on every
|
|
5
|
+
* frame while currentTime < 0.1, causing randomEyeMovement() to fire at ~50%
|
|
6
|
+
* of frames (every ~16 ms) instead of the intended ~750 ms interval.
|
|
7
|
+
*
|
|
8
|
+
* Specifically covers:
|
|
9
|
+
* - First call initialises timing correctly (resetTiming fires once)
|
|
10
|
+
* - Subsequent early frames do NOT re-call resetTiming (no burst movement)
|
|
11
|
+
* - A genuine timeline loop (time jumping from > 0.1 back to ~0) DOES reset
|
|
12
|
+
* - detectReset (time going backward during playback) still resets correctly
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=test-eye-system-reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-eye-system-reset.d.ts","sourceRoot":"","sources":["../../tests/test-eye-system-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|