create-aura3d 1.3.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/showcase-spec-artifacts.d.ts +104 -0
- package/dist/showcase-spec-artifacts.d.ts.map +1 -0
- package/dist/showcase-spec-artifacts.js +142 -0
- package/dist/showcase-spec-artifacts.js.map +1 -0
- package/dist/showcase-spec-category-plan.d.ts +15 -0
- package/dist/showcase-spec-category-plan.d.ts.map +1 -0
- package/dist/showcase-spec-category-plan.js +45 -0
- package/dist/showcase-spec-category-plan.js.map +1 -0
- package/dist/showcase-spec-compiler.d.ts +5 -0
- package/dist/showcase-spec-compiler.d.ts.map +1 -0
- package/dist/showcase-spec-compiler.js +240 -0
- package/dist/showcase-spec-compiler.js.map +1 -0
- package/dist/showcase-spec-evidence.d.ts +7 -0
- package/dist/showcase-spec-evidence.d.ts.map +1 -0
- package/dist/showcase-spec-evidence.js +815 -0
- package/dist/showcase-spec-evidence.js.map +1 -0
- package/dist/showcase-spec-game-geometry-extractor.d.ts +21 -0
- package/dist/showcase-spec-game-geometry-extractor.d.ts.map +1 -0
- package/dist/showcase-spec-game-geometry-extractor.js +725 -0
- package/dist/showcase-spec-game-geometry-extractor.js.map +1 -0
- package/dist/showcase-spec-game-replacement-evidence.d.ts +14 -0
- package/dist/showcase-spec-game-replacement-evidence.d.ts.map +1 -0
- package/dist/showcase-spec-game-replacement-evidence.js +219 -0
- package/dist/showcase-spec-game-replacement-evidence.js.map +1 -0
- package/dist/showcase-spec-game-template-evidence.d.ts +72 -0
- package/dist/showcase-spec-game-template-evidence.d.ts.map +1 -0
- package/dist/showcase-spec-game-template-evidence.js +435 -0
- package/dist/showcase-spec-game-template-evidence.js.map +1 -0
- package/dist/showcase-spec-gameplay-evidence.d.ts +3 -0
- package/dist/showcase-spec-gameplay-evidence.d.ts.map +1 -0
- package/dist/showcase-spec-gameplay-evidence.js +108 -0
- package/dist/showcase-spec-gameplay-evidence.js.map +1 -0
- package/dist/showcase-spec-parser.d.ts +3 -0
- package/dist/showcase-spec-parser.d.ts.map +1 -0
- package/dist/showcase-spec-parser.js +662 -0
- package/dist/showcase-spec-parser.js.map +1 -0
- package/dist/showcase-spec-platformer-artifacts.d.ts +3 -0
- package/dist/showcase-spec-platformer-artifacts.d.ts.map +1 -0
- package/dist/showcase-spec-platformer-artifacts.js +276 -0
- package/dist/showcase-spec-platformer-artifacts.js.map +1 -0
- package/dist/showcase-spec-racing-artifacts.d.ts +3 -0
- package/dist/showcase-spec-racing-artifacts.d.ts.map +1 -0
- package/dist/showcase-spec-racing-artifacts.js +273 -0
- package/dist/showcase-spec-racing-artifacts.js.map +1 -0
- package/dist/showcase-spec-replacement-apply.d.ts +10 -0
- package/dist/showcase-spec-replacement-apply.d.ts.map +1 -0
- package/dist/showcase-spec-replacement-apply.js +166 -0
- package/dist/showcase-spec-replacement-apply.js.map +1 -0
- package/dist/showcase-spec-replacement-candidates.d.ts +16 -0
- package/dist/showcase-spec-replacement-candidates.d.ts.map +1 -0
- package/dist/showcase-spec-replacement-candidates.js +244 -0
- package/dist/showcase-spec-replacement-candidates.js.map +1 -0
- package/dist/showcase-spec-replacement-game-geometry.d.ts +4 -0
- package/dist/showcase-spec-replacement-game-geometry.d.ts.map +1 -0
- package/dist/showcase-spec-replacement-game-geometry.js +175 -0
- package/dist/showcase-spec-replacement-game-geometry.js.map +1 -0
- package/dist/showcase-spec-replacement-manifest.d.ts +41 -0
- package/dist/showcase-spec-replacement-manifest.d.ts.map +1 -0
- package/dist/showcase-spec-replacement-manifest.js +62 -0
- package/dist/showcase-spec-replacement-manifest.js.map +1 -0
- package/dist/showcase-spec-replacement-values.d.ts +9 -0
- package/dist/showcase-spec-replacement-values.d.ts.map +1 -0
- package/dist/showcase-spec-replacement-values.js +41 -0
- package/dist/showcase-spec-replacement-values.js.map +1 -0
- package/dist/showcase-spec-replacement.d.ts +13 -0
- package/dist/showcase-spec-replacement.d.ts.map +1 -0
- package/dist/showcase-spec-replacement.js +144 -0
- package/dist/showcase-spec-replacement.js.map +1 -0
- package/dist/showcase-spec-types.d.ts +304 -0
- package/dist/showcase-spec-types.d.ts.map +1 -0
- package/dist/showcase-spec-types.js +2 -0
- package/dist/showcase-spec-types.js.map +1 -0
- package/package.json +13 -2
- package/templates/animation-studio/scripts/animation-scene.ts +1 -1
- package/templates/animation-studio/scripts/author-office-scene.ts +1 -1
- package/templates/animation-studio/scripts/build-characters.ts +1 -1
- package/templates/animation-studio/src/director/director-heuristics.ts +2 -2
- package/templates/animation-studio/src/director/{prompt-to-scene.ts → prompt-scene.ts} +1 -1
- package/templates/cinematic-scene/tests/screenshot.spec.ts +2 -4
- package/templates/falling-blocks-starter/README.md +18 -0
- package/templates/falling-blocks-starter/index.html +23 -0
- package/templates/falling-blocks-starter/package.json +21 -0
- package/templates/falling-blocks-starter/playwright.config.ts +12 -0
- package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.679d52fe.glb +0 -0
- package/templates/falling-blocks-starter/public/aura-assets/showcaseBlockfallCabinet.thumb.svg +1 -0
- package/templates/falling-blocks-starter/src/aura-assets.ts +20 -0
- package/templates/falling-blocks-starter/src/main.ts +358 -0
- package/templates/falling-blocks-starter/tests/playable.spec.ts +85 -0
- package/templates/falling-blocks-starter/tests/route-health.spec.ts +34 -0
- package/templates/falling-blocks-starter/tsconfig.json +13 -0
- package/templates/mini-game/README.md +13 -0
- package/templates/mini-game/index.html +1 -1
- package/templates/mini-game/package.json +1 -1
- package/templates/mini-game/src/main.ts +251 -21
- package/templates/mini-game/tests/playable.spec.ts +49 -0
- package/templates/mini-game/tests/screenshot.spec.ts +37 -32
- package/templates/product-viewer/tests/screenshot.spec.ts +3 -5
- package/templates/racing-starter/README.md +27 -0
- package/templates/racing-starter/index.html +23 -0
- package/templates/racing-starter/package.json +21 -0
- package/templates/racing-starter/playwright.config.ts +12 -0
- package/templates/racing-starter/public/aura-assets/showcaseCleanSportsCar.1c69283f.glb +0 -0
- package/templates/racing-starter/public/aura-assets/showcaseCleanSportsCar.thumb.svg +1 -0
- package/templates/racing-starter/public/aura-assets/showcaseReadableKartCircuit.5cbb912e.glb +0 -0
- package/templates/racing-starter/public/aura-assets/showcaseReadableKartCircuit.thumb.svg +1 -0
- package/templates/racing-starter/src/aura-assets.ts +36 -0
- package/templates/racing-starter/src/main.ts +280 -0
- package/templates/racing-starter/tests/playable.spec.ts +93 -0
- package/templates/racing-starter/tests/route-health.spec.ts +40 -0
- package/templates/racing-starter/tsconfig.json +13 -0
- package/templates/animation-channel/public/aura-assets/moon-garden-feature-frame.png +0 -0
- package/templates/animation-channel/tests/reports/prompt-animation/cartoon-sample-episode.png +0 -0
- package/templates/animation-studio/dist/episodes/prompt-to-scene-proof/two-robots-fixing-a-car.document.json +0 -680
- package/templates/animation-studio/dist/episodes/scene/episode-3d.webm +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/action.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/dialogue.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/final.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/first.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/mouth-closed.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/frames/mouth-open.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/render-live-summary.json +0 -9763
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/broken.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/chefs.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/customer.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/friend-1.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/friend-2.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-1.png +0 -0
- package/templates/animation-studio/dist/episodes/scene/skeleton-overlays/worker-2.png +0 -0
- package/templates/animation-studio/dist/generated/second-scene.document.json +0 -1210
- package/templates/animation-studio/dist/generated/studio-edited.document.json +0 -1196
- package/templates/animation-studio/dist/scene/inshader-accept.document.json +0 -1
- package/templates/animation-studio/dist/scene/inshader-test.document.json +0 -1
- package/templates/animation-studio/dist/scene/integ.document.json +0 -1
- package/templates/animation-studio/dist/scene/working.document.json +0 -673
- package/templates/animation-studio/dist/scene/working.history.json +0 -1
- package/templates/animation-studio/studio/dist/assets/index-C7f8tHfi.css +0 -1
- package/templates/animation-studio/studio/dist/assets/index-CLo3GXyN.js +0 -43
- package/templates/animation-studio/studio/dist/index.html +0 -19
- package/templates/animation-studio/tests/reports/animation-studio/hifi-cast-validation.json +0 -938
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { extractPlatformerPlayableSurfaceMapFromAsset, extractRacingTrackTopologyFromAsset } from "./showcase-spec-game-geometry-extractor.js";
|
|
2
|
+
export function applyGeneratedGameTemplateEvidence(spec, options = {}) {
|
|
3
|
+
if (spec.category === "game-racing" && spec.racing && !spec.racing.raceDesign.trackTopologyEvidence) {
|
|
4
|
+
const evidencePath = `game-template/${spec.routeId}-racing-track-topology.json`;
|
|
5
|
+
const racing = {
|
|
6
|
+
...spec.racing,
|
|
7
|
+
raceDesign: {
|
|
8
|
+
...spec.racing.raceDesign,
|
|
9
|
+
trackTopologyEvidence: evidencePath
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const nextSpec = { ...spec, racing };
|
|
13
|
+
return {
|
|
14
|
+
spec: nextSpec,
|
|
15
|
+
artifacts: {
|
|
16
|
+
[evidencePath]: createRacingTrackTopologyEvidence(nextSpec, racing, options)
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (spec.category === "game-platformer" && spec.platformer && !spec.platformer.levelDesign.playableSurfaceEvidence) {
|
|
21
|
+
const evidencePath = `game-template/${spec.routeId}-platformer-playable-surfaces.json`;
|
|
22
|
+
const platformer = {
|
|
23
|
+
...spec.platformer,
|
|
24
|
+
levelDesign: {
|
|
25
|
+
...spec.platformer.levelDesign,
|
|
26
|
+
playableSurfaceEvidence: evidencePath
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const nextSpec = { ...spec, platformer };
|
|
30
|
+
return {
|
|
31
|
+
spec: nextSpec,
|
|
32
|
+
artifacts: {
|
|
33
|
+
[evidencePath]: createPlatformerPlayableSurfaceEvidence(nextSpec, platformer, options)
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return { spec, artifacts: {} };
|
|
38
|
+
}
|
|
39
|
+
export function createRacingTemplatePlan(racing, options = {}) {
|
|
40
|
+
const extracted = extractRacingTrackTopologyFromAsset(racing.trackAsset, {
|
|
41
|
+
projectDir: options.projectDir,
|
|
42
|
+
renderedProbePath: racing.raceDesign.trackTopology?.evidence.renderedProbe,
|
|
43
|
+
routeOverlayPath: racing.raceDesign.trackTopology?.evidence.routeOverlay
|
|
44
|
+
});
|
|
45
|
+
if (extracted.ok) {
|
|
46
|
+
const topology = extracted.value;
|
|
47
|
+
const points = topology.roadCenterline.map((point) => ({ x: point.x, y: point.z }));
|
|
48
|
+
const routeLength = topology.lapLengthMeters ?? measureRouteLength(points);
|
|
49
|
+
return {
|
|
50
|
+
width: topology.roadCenterline.find((point) => point.width !== undefined)?.width ?? 0.18,
|
|
51
|
+
points,
|
|
52
|
+
checkpoints: topology.checkpoints.map((checkpoint) => checkpoint.progress),
|
|
53
|
+
routeLength,
|
|
54
|
+
authoredLapSeconds: topology.estimatedLapSeconds,
|
|
55
|
+
topology,
|
|
56
|
+
extractionReasons: extracted.reasons,
|
|
57
|
+
extractionBlockers: []
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (racing.raceDesign.trackTopology) {
|
|
61
|
+
const topology = racing.raceDesign.trackTopology;
|
|
62
|
+
const points = topology.roadCenterline.map((point) => ({ x: point.x, y: point.z }));
|
|
63
|
+
const routeLength = topology.lapLengthMeters ?? measureRouteLength(points);
|
|
64
|
+
return {
|
|
65
|
+
width: topology.roadCenterline.find((point) => point.width !== undefined)?.width ?? 0.18,
|
|
66
|
+
points,
|
|
67
|
+
checkpoints: topology.checkpoints.map((checkpoint) => checkpoint.progress),
|
|
68
|
+
routeLength,
|
|
69
|
+
authoredLapSeconds: topology.estimatedLapSeconds,
|
|
70
|
+
topology,
|
|
71
|
+
extractionReasons: extracted.reasons,
|
|
72
|
+
extractionBlockers: extracted.blockers
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const points = [
|
|
76
|
+
{ x: -1.72, y: 0.76 },
|
|
77
|
+
{ x: -1.28, y: 1.18 },
|
|
78
|
+
{ x: -0.42, y: 1.08 },
|
|
79
|
+
{ x: 0.14, y: 0.52 },
|
|
80
|
+
{ x: 0.02, y: -0.12 },
|
|
81
|
+
{ x: -0.72, y: -0.4 },
|
|
82
|
+
{ x: -1.12, y: -0.02 },
|
|
83
|
+
{ x: -0.68, y: 0.5 },
|
|
84
|
+
{ x: 0.18, y: 0.36 },
|
|
85
|
+
{ x: 0.92, y: 0.78 },
|
|
86
|
+
{ x: 1.54, y: 0.42 },
|
|
87
|
+
{ x: 1.32, y: -0.34 },
|
|
88
|
+
{ x: 0.58, y: -0.74 },
|
|
89
|
+
{ x: -0.26, y: -0.88 },
|
|
90
|
+
{ x: -1.18, y: -0.56 },
|
|
91
|
+
{ x: -1.74, y: 0.04 },
|
|
92
|
+
{ x: -1.72, y: 0.76 }
|
|
93
|
+
];
|
|
94
|
+
const routeLength = measureRouteLength(points);
|
|
95
|
+
const authoredLapSeconds = Math.max(racing.raceDesign.minLapSeconds, Math.round(routeLength / 0.11));
|
|
96
|
+
const fallbackTopology = {
|
|
97
|
+
assetId: racing.trackAsset,
|
|
98
|
+
assetHash: "sha256-0000000000000000000000000000000000000000000000000000000000000000",
|
|
99
|
+
source: "compiler-authored",
|
|
100
|
+
roadCenterline: points.map((point) => ({ x: point.x, z: point.y, width: 0.18 })),
|
|
101
|
+
checkpoints: createCheckpointProgresses(Math.max(6, racing.raceDesign.minCheckpoints)).map((progress) => ({ progress, width: 0.18 })),
|
|
102
|
+
lapLengthMeters: Number(routeLength.toFixed(3)),
|
|
103
|
+
estimatedLapSeconds: authoredLapSeconds,
|
|
104
|
+
confidence: 0.35,
|
|
105
|
+
modelAlignment: {
|
|
106
|
+
source: "compiler-authored",
|
|
107
|
+
modelBounds: { min: [-1, -0.05, -1], max: [1, 0.05, 1] },
|
|
108
|
+
modelPoint: [0, -0.05, 0],
|
|
109
|
+
gamePoint: { x: 0, z: 0 },
|
|
110
|
+
evidence: {
|
|
111
|
+
notes: "Diagnostic fallback alignment only; public racing output requires hash-bound mesh or overlay-validated model alignment."
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
evidence: {
|
|
115
|
+
sourceAsset: `assets.${racing.trackAsset}`,
|
|
116
|
+
notes: "Compiler-authored fallback route. This is retained for diagnostics only and is not sufficient for public racing release without hash-bound track topology."
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
width: 0.18,
|
|
121
|
+
points,
|
|
122
|
+
checkpoints: createCheckpointProgresses(Math.max(6, racing.raceDesign.minCheckpoints)),
|
|
123
|
+
routeLength,
|
|
124
|
+
authoredLapSeconds,
|
|
125
|
+
topology: fallbackTopology,
|
|
126
|
+
extractionReasons: extracted.reasons,
|
|
127
|
+
extractionBlockers: extracted.blockers
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export function createPlatformerTemplatePlan(spec, platformer, options = {}) {
|
|
131
|
+
const worldAsset = platformer.worldAssets[0] ?? "missing-world-asset";
|
|
132
|
+
const extracted = extractPlatformerPlayableSurfaceMapFromAsset(worldAsset, {
|
|
133
|
+
projectDir: options.projectDir,
|
|
134
|
+
renderedProbePath: platformer.levelDesign.playableSurfaceMap?.evidence.renderedProbe,
|
|
135
|
+
routeOverlayPath: platformer.levelDesign.playableSurfaceMap?.evidence.routeOverlay
|
|
136
|
+
});
|
|
137
|
+
if (extracted.ok) {
|
|
138
|
+
return platformerPlanFromSurfaceMap(spec, platformer, extracted.value, extracted.reasons, []);
|
|
139
|
+
}
|
|
140
|
+
if (platformer.levelDesign.playableSurfaceMap) {
|
|
141
|
+
const surfaceMap = platformer.levelDesign.playableSurfaceMap;
|
|
142
|
+
return platformerPlanFromSurfaceMap(spec, platformer, surfaceMap, extracted.reasons, extracted.blockers);
|
|
143
|
+
}
|
|
144
|
+
const platforms = [
|
|
145
|
+
{ id: "start-plaza", x: -0.4, y: 0, width: 7.2, height: 0.34, worldAsset, evidenceRole: "playable-surface" },
|
|
146
|
+
{ id: "lower-bridge", x: 6.4, y: 0.18, width: 6.4, height: 0.34, worldAsset, evidenceRole: "bridge" },
|
|
147
|
+
{ id: "mid-run", x: 12.8, y: 0.42, width: 6.8, height: 0.34, worldAsset, evidenceRole: "playable-surface" },
|
|
148
|
+
{ id: "hazard-gap", x: 19.6, y: 0.14, width: 5.8, height: 0.34, worldAsset, evidenceRole: "bridge" },
|
|
149
|
+
{ id: "finish-ledges", x: 26.4, y: 0.36, width: 8.4, height: 0.34, worldAsset, evidenceRole: "finish-run" },
|
|
150
|
+
{ id: "final-platform", x: 34.4, y: 0.2, width: 5.6, height: 0.34, worldAsset, evidenceRole: "finish-run" }
|
|
151
|
+
];
|
|
152
|
+
const fallbackMap = {
|
|
153
|
+
assetId: worldAsset,
|
|
154
|
+
assetHash: "sha256-0000000000000000000000000000000000000000000000000000000000000000",
|
|
155
|
+
source: "compiler-authored",
|
|
156
|
+
surfaces: [
|
|
157
|
+
...platforms.map((surface) => ({
|
|
158
|
+
id: surface.id,
|
|
159
|
+
x: Number((surface.x + surface.width / 2).toFixed(3)),
|
|
160
|
+
y: surface.y,
|
|
161
|
+
width: surface.width,
|
|
162
|
+
height: surface.height,
|
|
163
|
+
kind: surface.evidenceRole === "finish-run" ? "finish" : "platform"
|
|
164
|
+
})),
|
|
165
|
+
{ id: "hazard-gap-01", x: 18.2, y: 0.52, width: 0.42, height: 0.24, kind: "hazard" },
|
|
166
|
+
{ id: "checkpoint-mid-run", x: 16.6, y: 1, width: 1.1, height: 1.1, kind: "checkpoint" }
|
|
167
|
+
],
|
|
168
|
+
levelLength: 37.2,
|
|
169
|
+
estimatedCompletionSeconds: 30,
|
|
170
|
+
characterScaleRatio: 0.42,
|
|
171
|
+
confidence: 0.35,
|
|
172
|
+
modelAlignment: {
|
|
173
|
+
source: "compiler-authored",
|
|
174
|
+
modelBounds: { min: [-1, -0.05, -1], max: [1, 0.05, 1] },
|
|
175
|
+
modelPoint: [0, -0.05, 0],
|
|
176
|
+
gamePoint: { x: 18.2, y: 0 },
|
|
177
|
+
evidence: {
|
|
178
|
+
notes: "Diagnostic fallback alignment only; public platformer output requires hash-bound mesh or overlay-validated model alignment."
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
evidence: {
|
|
182
|
+
sourceAsset: `assets.${worldAsset}`,
|
|
183
|
+
notes: "Compiler-authored fallback surfaces. This is retained for diagnostics only and is not sufficient for public platformer release without a hash-bound playable-surface map."
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
return {
|
|
187
|
+
id: `${spec.routeId}-authored-platformer-level`,
|
|
188
|
+
start: { x: 0, y: 0.34 },
|
|
189
|
+
finish: { x: 37.2, y: 0.54 },
|
|
190
|
+
moveSpeed: 1.05,
|
|
191
|
+
jumpVelocity: 7.4,
|
|
192
|
+
lowerBound: -1.4,
|
|
193
|
+
platforms,
|
|
194
|
+
collectibles: [
|
|
195
|
+
{ id: "coin-01", x: 3.8, y: 1.0, value: 50 },
|
|
196
|
+
{ id: "coin-02", x: 9.6, y: 1.2, value: 50 },
|
|
197
|
+
{ id: "coin-03", x: 15.2, y: 1.42, value: 50 },
|
|
198
|
+
{ id: "coin-04", x: 22.8, y: 1.12, value: 50 },
|
|
199
|
+
{ id: "coin-05", x: 30.2, y: 1.32, value: 50 }
|
|
200
|
+
],
|
|
201
|
+
hazards: [
|
|
202
|
+
{ id: "drone-01", x: 18.2, y: 0.52, width: 0.42, height: 0.24, respawn: true },
|
|
203
|
+
{ id: "drone-02", x: 27.4, y: 0.68, width: 0.42, height: 0.24, respawn: true }
|
|
204
|
+
],
|
|
205
|
+
checkpoints: [
|
|
206
|
+
{ id: "checkpoint-start-run", x: 5.4, y: 0.62, radius: 1.1 },
|
|
207
|
+
{ id: "checkpoint-bridge", x: 10.4, y: 0.82, radius: 1.1 },
|
|
208
|
+
{ id: "checkpoint-mid-run", x: 16.6, y: 1.0, radius: 1.1 },
|
|
209
|
+
{ id: "checkpoint-hazard", x: 23.2, y: 0.8, radius: 1.1 },
|
|
210
|
+
{ id: "checkpoint-final", x: 31.4, y: 0.94, radius: 1.1 },
|
|
211
|
+
{ id: "checkpoint-finish", x: 36.4, y: 0.78, radius: 1.1 }
|
|
212
|
+
],
|
|
213
|
+
playableSurfaceMap: fallbackMap,
|
|
214
|
+
extractionReasons: extracted.reasons,
|
|
215
|
+
extractionBlockers: extracted.blockers
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
function platformerPlanFromSurfaceMap(spec, platformer, playableSurfaceMap, extractionReasons, extractionBlockers) {
|
|
219
|
+
const playableSurfaces = playableSurfaceMap.surfaces.filter((surface) => surface.kind === "ground" || surface.kind === "platform" || surface.kind === "moving");
|
|
220
|
+
const platforms = playableSurfaces.map((surface) => ({
|
|
221
|
+
id: surface.id,
|
|
222
|
+
x: Number((surface.x - surface.width / 2).toFixed(3)),
|
|
223
|
+
y: surface.y,
|
|
224
|
+
width: surface.width,
|
|
225
|
+
height: surface.height,
|
|
226
|
+
worldAsset: playableSurfaceMap.assetId,
|
|
227
|
+
evidenceRole: surface.kind === "moving" ? "bridge" : "playable-surface"
|
|
228
|
+
}));
|
|
229
|
+
const checkpointSurfaces = playableSurfaceMap.surfaces.filter((surface) => surface.kind === "checkpoint");
|
|
230
|
+
const hazardSurfaces = playableSurfaceMap.surfaces.filter((surface) => surface.kind === "hazard");
|
|
231
|
+
const ground = playableSurfaces.find((surface) => surface.kind === "ground") ?? playableSurfaces[0];
|
|
232
|
+
const finishSurface = playableSurfaceMap.surfaces.find((surface) => surface.kind === "finish") ?? playableSurfaces[playableSurfaces.length - 1];
|
|
233
|
+
const start = ground
|
|
234
|
+
? { x: Number((ground.x - ground.width / 2 + 0.8).toFixed(3)), y: Number((ground.y + ground.height + 0.02).toFixed(3)) }
|
|
235
|
+
: { x: 0, y: 0.34 };
|
|
236
|
+
const finish = finishSurface
|
|
237
|
+
? { x: Number((finishSurface.x + finishSurface.width / 2).toFixed(3)), y: Number((finishSurface.y + finishSurface.height + 0.02).toFixed(3)) }
|
|
238
|
+
: { x: playableSurfaceMap.levelLength, y: 0.54 };
|
|
239
|
+
return {
|
|
240
|
+
id: `${spec.routeId}-asset-bound-platformer-level`,
|
|
241
|
+
start,
|
|
242
|
+
finish,
|
|
243
|
+
moveSpeed: Number((playableSurfaceMap.levelLength / playableSurfaceMap.estimatedCompletionSeconds).toFixed(3)),
|
|
244
|
+
jumpVelocity: 7.4,
|
|
245
|
+
lowerBound: -1.4,
|
|
246
|
+
platforms,
|
|
247
|
+
collectibles: [
|
|
248
|
+
{ id: "coin-01", x: Number((start.x + 3.2).toFixed(3)), y: Number((start.y + 0.7).toFixed(3)), value: 50 },
|
|
249
|
+
{ id: "coin-02", x: Number((start.x + 8.2).toFixed(3)), y: Number((start.y + 1.0).toFixed(3)), value: 50 },
|
|
250
|
+
{ id: "coin-03", x: Number((start.x + 14.8).toFixed(3)), y: Number((start.y + 1.2).toFixed(3)), value: 50 },
|
|
251
|
+
{ id: "coin-04", x: Number((Math.max(start.x + 20, finish.x - 8)).toFixed(3)), y: Number((finish.y + 0.8).toFixed(3)), value: 50 },
|
|
252
|
+
{ id: "coin-05", x: Number((Math.max(start.x + 24, finish.x - 3.2)).toFixed(3)), y: Number((finish.y + 1.0).toFixed(3)), value: 50 }
|
|
253
|
+
],
|
|
254
|
+
hazards: hazardSurfaces.map((surface) => ({
|
|
255
|
+
id: surface.id,
|
|
256
|
+
x: Number((surface.x - surface.width / 2).toFixed(3)),
|
|
257
|
+
y: surface.y,
|
|
258
|
+
width: surface.width,
|
|
259
|
+
height: surface.height,
|
|
260
|
+
respawn: true
|
|
261
|
+
})),
|
|
262
|
+
checkpoints: checkpointSurfaces.map((surface) => ({
|
|
263
|
+
id: surface.id,
|
|
264
|
+
x: surface.x,
|
|
265
|
+
y: surface.y,
|
|
266
|
+
radius: Math.max(0.9, surface.width / 2)
|
|
267
|
+
})),
|
|
268
|
+
playableSurfaceMap,
|
|
269
|
+
extractionReasons,
|
|
270
|
+
extractionBlockers
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
function createRacingTrackTopologyEvidence(spec, racing, options) {
|
|
274
|
+
const plan = createRacingTemplatePlan(racing, options);
|
|
275
|
+
const releaseSafeTopology = isReleaseSafeRacingTopology(racing.raceDesign.visibleTrackTopology);
|
|
276
|
+
const failures = [
|
|
277
|
+
...(releaseSafeTopology ? [] : ["missing-release-safe-track-topology"]),
|
|
278
|
+
...plan.extractionBlockers,
|
|
279
|
+
...(isOverlayValidatedGeometrySource(plan.topology.source) ? [] : ["missing-overlay-validated-track-topology"]),
|
|
280
|
+
...(plan.topology.source !== "asset-mesh-extracted" && !hasRouteOverlayEvidence(plan.topology.evidence.routeOverlay)
|
|
281
|
+
? ["missing-track-topology-overlay-evidence"]
|
|
282
|
+
: []),
|
|
283
|
+
...(plan.topology.assetHash.startsWith("sha256-000000") ? ["missing-track-asset-hash-binding"] : []),
|
|
284
|
+
...(plan.topology.confidence >= 0.65 ? [] : ["track-topology-confidence-too-low"]),
|
|
285
|
+
...(racing.raceDesign.routeAlignedToTrackAsset ? [] : ["route-not-aligned-to-track-asset"]),
|
|
286
|
+
...(racing.raceDesign.carTrackScaleCompatible ? [] : ["car-track-scale-incompatible"]),
|
|
287
|
+
...(racing.raceDesign.noDebugLocatorDisk ? [] : ["debug-locator-disk-present"]),
|
|
288
|
+
...(plan.authoredLapSeconds >= racing.raceDesign.minLapSeconds ? [] : ["lap-duration-too-short"]),
|
|
289
|
+
...(plan.checkpoints.length >= racing.raceDesign.minCheckpoints ? [] : ["too-few-checkpoints"])
|
|
290
|
+
];
|
|
291
|
+
return {
|
|
292
|
+
schema: "aura3d-racing-track-topology/1.0",
|
|
293
|
+
routeId: spec.routeId,
|
|
294
|
+
generatedBy: "showcase-spec-compiler",
|
|
295
|
+
topologySource: racing.raceDesign.visibleTrackTopology,
|
|
296
|
+
templateCapabilityStatus: releaseSafeTopology
|
|
297
|
+
? `${racing.raceDesign.visibleTrackTopology}-proven`
|
|
298
|
+
: "blocked-missing-release-safe-track-topology",
|
|
299
|
+
vehicleAsset: racing.vehicleAsset,
|
|
300
|
+
trackAsset: racing.trackAsset,
|
|
301
|
+
assetHash: plan.topology.assetHash,
|
|
302
|
+
topology: plan.topology,
|
|
303
|
+
meshExtraction: {
|
|
304
|
+
status: createGeometryExtractionStatus(plan.topology.source, plan.extractionBlockers),
|
|
305
|
+
reasons: plan.extractionReasons,
|
|
306
|
+
blockers: plan.extractionBlockers
|
|
307
|
+
},
|
|
308
|
+
assetBinding: {
|
|
309
|
+
kind: "aura-game-asset-bound-racing-route",
|
|
310
|
+
layoutContractVersion: "1.0",
|
|
311
|
+
generatedFrom: plan.topology.source === "asset-mesh-extracted" ? "mesh-derived-track-topology" : "hash-bound-track-topology",
|
|
312
|
+
vehicleAsset: racing.vehicleAsset,
|
|
313
|
+
trackAsset: racing.trackAsset,
|
|
314
|
+
trackAssetHash: plan.topology.assetHash,
|
|
315
|
+
topologySource: plan.topology.source,
|
|
316
|
+
confidence: plan.topology.confidence,
|
|
317
|
+
routeLength: Number(plan.routeLength.toFixed(3)),
|
|
318
|
+
authoredLapSeconds: plan.authoredLapSeconds,
|
|
319
|
+
pointCount: plan.points.length,
|
|
320
|
+
checkpointCount: plan.checkpoints.length
|
|
321
|
+
},
|
|
322
|
+
route: {
|
|
323
|
+
width: plan.width,
|
|
324
|
+
routeLength: Number(plan.routeLength.toFixed(3)),
|
|
325
|
+
points: plan.points,
|
|
326
|
+
checkpoints: plan.checkpoints
|
|
327
|
+
},
|
|
328
|
+
minLapSeconds: racing.raceDesign.minLapSeconds,
|
|
329
|
+
authoredLapSeconds: plan.authoredLapSeconds,
|
|
330
|
+
minCheckpoints: racing.raceDesign.minCheckpoints,
|
|
331
|
+
minLaps: racing.raceDesign.minLaps,
|
|
332
|
+
routeAlignedToTrackAsset: racing.raceDesign.routeAlignedToTrackAsset,
|
|
333
|
+
carTrackScaleCompatible: racing.raceDesign.carTrackScaleCompatible,
|
|
334
|
+
noDebugLocatorDisk: racing.raceDesign.noDebugLocatorDisk,
|
|
335
|
+
pass: failures.length === 0,
|
|
336
|
+
failures
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function createPlatformerPlayableSurfaceEvidence(spec, platformer, options) {
|
|
340
|
+
const plan = createPlatformerTemplatePlan(spec, platformer, options);
|
|
341
|
+
const releaseSafeSurfaceSource = isReleaseSafePlatformerSurfaceSource(platformer.levelDesign.playableSurfaceSource);
|
|
342
|
+
const failures = [
|
|
343
|
+
...(releaseSafeSurfaceSource ? [] : ["missing-release-safe-playable-surfaces"]),
|
|
344
|
+
...plan.extractionBlockers,
|
|
345
|
+
...(isOverlayValidatedGeometrySource(plan.playableSurfaceMap.source) ? [] : ["missing-overlay-validated-playable-surface-map"]),
|
|
346
|
+
...(plan.playableSurfaceMap.source !== "asset-mesh-extracted" && !hasRouteOverlayEvidence(plan.playableSurfaceMap.evidence.routeOverlay)
|
|
347
|
+
? ["missing-playable-surface-overlay-evidence"]
|
|
348
|
+
: []),
|
|
349
|
+
...(plan.playableSurfaceMap.assetHash.startsWith("sha256-000000") ? ["missing-world-asset-hash-binding"] : []),
|
|
350
|
+
...(plan.playableSurfaceMap.confidence >= 0.65 ? [] : ["playable-surface-confidence-too-low"]),
|
|
351
|
+
...(platformer.levelDesign.playableSurfaceLayoutValidated ? [] : ["playable-surface-layout-not-validated"]),
|
|
352
|
+
...(platformer.levelDesign.characterWorldScaleCompatible ? [] : ["character-world-scale-incompatible"]),
|
|
353
|
+
...(platformer.levelDesign.styleCompatible ? [] : ["style-incompatible"]),
|
|
354
|
+
...(platformer.levelDesign.primitivePrimaryWorldRejected ? [] : ["primitive-primary-world-not-rejected"]),
|
|
355
|
+
...(plan.checkpoints.length >= platformer.levelDesign.minCheckpoints ? [] : ["too-few-checkpoints"]),
|
|
356
|
+
...(platformer.levelDesign.requiresHazardRespawn && plan.hazards.length === 0 ? ["missing-hazard-respawn"] : []),
|
|
357
|
+
...(platformer.levelDesign.requiresFinish && plan.finish.x <= plan.start.x ? ["missing-finish-progression"] : [])
|
|
358
|
+
];
|
|
359
|
+
return {
|
|
360
|
+
schema: "aura3d-platformer-playable-surfaces/1.0",
|
|
361
|
+
routeId: spec.routeId,
|
|
362
|
+
generatedBy: "showcase-spec-compiler",
|
|
363
|
+
surfaceSource: platformer.levelDesign.playableSurfaceSource,
|
|
364
|
+
templateCapabilityStatus: releaseSafeSurfaceSource
|
|
365
|
+
? `${platformer.levelDesign.playableSurfaceSource}-proven`
|
|
366
|
+
: "blocked-missing-release-safe-playable-surfaces",
|
|
367
|
+
characterAsset: platformer.characterAsset,
|
|
368
|
+
worldAssets: platformer.worldAssets,
|
|
369
|
+
assetHash: plan.playableSurfaceMap.assetHash,
|
|
370
|
+
surfaceMap: plan.playableSurfaceMap,
|
|
371
|
+
meshExtraction: {
|
|
372
|
+
status: createGeometryExtractionStatus(plan.playableSurfaceMap.source, plan.extractionBlockers),
|
|
373
|
+
reasons: plan.extractionReasons,
|
|
374
|
+
blockers: plan.extractionBlockers
|
|
375
|
+
},
|
|
376
|
+
assetBindings: platformer.worldAssets.map((worldAsset) => ({
|
|
377
|
+
kind: "aura-game-asset-bound-platformer-level",
|
|
378
|
+
layoutContractVersion: "1.0",
|
|
379
|
+
generatedFrom: plan.playableSurfaceMap.source === "asset-mesh-extracted" ? "mesh-derived-playable-surface-map" : "hash-bound-playable-surface-map",
|
|
380
|
+
characterAsset: platformer.characterAsset,
|
|
381
|
+
worldAsset,
|
|
382
|
+
worldAssetHash: worldAsset === plan.playableSurfaceMap.assetId ? plan.playableSurfaceMap.assetHash : undefined,
|
|
383
|
+
surfaceSource: plan.playableSurfaceMap.source,
|
|
384
|
+
confidence: plan.playableSurfaceMap.confidence,
|
|
385
|
+
surfaceIds: plan.platforms
|
|
386
|
+
.filter((surface) => surface.worldAsset === worldAsset)
|
|
387
|
+
.map((surface) => surface.id)
|
|
388
|
+
})),
|
|
389
|
+
authoredPlayableSeconds: platformer.levelDesign.minPlayableSeconds,
|
|
390
|
+
minPlayableSeconds: platformer.levelDesign.minPlayableSeconds,
|
|
391
|
+
start: plan.start,
|
|
392
|
+
finish: plan.finish,
|
|
393
|
+
surfaces: plan.platforms,
|
|
394
|
+
checkpoints: plan.checkpoints,
|
|
395
|
+
hazards: plan.hazards,
|
|
396
|
+
styleCompatible: platformer.levelDesign.styleCompatible,
|
|
397
|
+
scaleCompatible: platformer.levelDesign.characterWorldScaleCompatible,
|
|
398
|
+
primitivePrimaryWorldRejected: platformer.levelDesign.primitivePrimaryWorldRejected,
|
|
399
|
+
pass: failures.length === 0,
|
|
400
|
+
failures
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
function createCheckpointProgresses(count) {
|
|
404
|
+
return Array.from({ length: count }, (_unused, index) => Number(((index + 1) / count).toFixed(3)));
|
|
405
|
+
}
|
|
406
|
+
function isReleaseSafeRacingTopology(source) {
|
|
407
|
+
return source === "asset-bound-road-topology" || source === "mesh-road-topology";
|
|
408
|
+
}
|
|
409
|
+
function isReleaseSafePlatformerSurfaceSource(source) {
|
|
410
|
+
return source === "asset-bound-playable-surfaces" || source === "asset-derived-playable-surfaces";
|
|
411
|
+
}
|
|
412
|
+
function isOverlayValidatedGeometrySource(source) {
|
|
413
|
+
return source === "asset-mesh-extracted" || source === "manifest-authored-overlay-validated" || source === "compiler-authored-overlay-validated";
|
|
414
|
+
}
|
|
415
|
+
function createGeometryExtractionStatus(source, blockers) {
|
|
416
|
+
if (source === "asset-mesh-extracted")
|
|
417
|
+
return blockers.length === 0 ? "pass" : "fail";
|
|
418
|
+
if (isOverlayValidatedGeometrySource(source))
|
|
419
|
+
return blockers.length === 0 ? "overlay-validated" : "fail";
|
|
420
|
+
return "fail";
|
|
421
|
+
}
|
|
422
|
+
function hasRouteOverlayEvidence(routeOverlay) {
|
|
423
|
+
return typeof routeOverlay === "string" && routeOverlay.length > 0;
|
|
424
|
+
}
|
|
425
|
+
function measureRouteLength(points) {
|
|
426
|
+
let total = 0;
|
|
427
|
+
for (let index = 1; index < points.length; index += 1) {
|
|
428
|
+
const previous = points[index - 1];
|
|
429
|
+
const current = points[index];
|
|
430
|
+
if (previous && current)
|
|
431
|
+
total += Math.hypot(current.x - previous.x, current.y - previous.y);
|
|
432
|
+
}
|
|
433
|
+
return total;
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=showcase-spec-game-template-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"showcase-spec-game-template-evidence.js","sourceRoot":"","sources":["../../../../packages/create-aura3d/src/showcase-spec-game-template-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"showcase-spec-gameplay-evidence.d.ts","sourceRoot":"","sources":["../../../../packages/create-aura3d/src/showcase-spec-gameplay-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,MAAM,EAAE,CAMzH"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export function validateGameGameplayProof(spec, proof) {
|
|
2
|
+
const blockers = [];
|
|
3
|
+
blockers.push(...validateScreenshotProof(proof));
|
|
4
|
+
if (spec.category === "game-racing")
|
|
5
|
+
blockers.push(...validateRacingGameplayProof(spec, proof));
|
|
6
|
+
if (spec.category === "game-platformer")
|
|
7
|
+
blockers.push(...validatePlatformerGameplayProof(spec, proof));
|
|
8
|
+
return blockers;
|
|
9
|
+
}
|
|
10
|
+
function validateScreenshotProof(proof) {
|
|
11
|
+
const screenshots = recordValue(proof.screenshots);
|
|
12
|
+
const beforeInput = recordValue(screenshots?.beforeInput);
|
|
13
|
+
const afterInput = recordValue(screenshots?.afterInput);
|
|
14
|
+
const blockers = [];
|
|
15
|
+
if (!isPositiveNumber(beforeInput?.bytes))
|
|
16
|
+
blockers.push("evidence:gameplay-proof:missing-before-screenshot");
|
|
17
|
+
if (!isPositiveNumber(afterInput?.bytes))
|
|
18
|
+
blockers.push("evidence:gameplay-proof:missing-after-screenshot");
|
|
19
|
+
if (!isSha256String(beforeInput?.sha256))
|
|
20
|
+
blockers.push("evidence:gameplay-proof:missing-before-screenshot-sha256");
|
|
21
|
+
if (!isSha256String(afterInput?.sha256))
|
|
22
|
+
blockers.push("evidence:gameplay-proof:missing-after-screenshot-sha256");
|
|
23
|
+
return blockers;
|
|
24
|
+
}
|
|
25
|
+
function validateRacingGameplayProof(spec, proof) {
|
|
26
|
+
const categoryProof = recordValue(proof.categoryProof);
|
|
27
|
+
const racingProof = recordValue(categoryProof?.racing);
|
|
28
|
+
const blockers = [];
|
|
29
|
+
if (racingProof?.inputChangesSpeed !== true)
|
|
30
|
+
blockers.push("evidence:gameplay-proof:racing:input-speed-missing");
|
|
31
|
+
if (racingProof?.inputChangesHeading !== true)
|
|
32
|
+
blockers.push("evidence:gameplay-proof:racing:input-heading-missing");
|
|
33
|
+
if (racingProof?.checkpointOrLapProgression !== true)
|
|
34
|
+
blockers.push("evidence:gameplay-proof:racing:checkpoint-lap-missing");
|
|
35
|
+
if (racingProof?.resetWorks !== true)
|
|
36
|
+
blockers.push("evidence:gameplay-proof:racing:reset-missing");
|
|
37
|
+
blockers.push(...validateVisualReviewEvidence("evidence:gameplay-proof:racing", spec, racingProof));
|
|
38
|
+
if (racingProof?.routeAlignedToVisibleTrack !== true)
|
|
39
|
+
blockers.push("evidence:gameplay-proof:racing:route-alignment-missing");
|
|
40
|
+
if (racingProof?.noDebugLocatorDisk !== true)
|
|
41
|
+
blockers.push("evidence:gameplay-proof:racing:debug-locator-disk-present");
|
|
42
|
+
if (numberValue(racingProof?.authoredLapSeconds) < (spec.racing?.raceDesign.minLapSeconds ?? 30)) {
|
|
43
|
+
blockers.push(`evidence:gameplay-proof:racing:authored-lap-seconds-too-low:${numberValue(racingProof?.authoredLapSeconds)}`);
|
|
44
|
+
}
|
|
45
|
+
return blockers;
|
|
46
|
+
}
|
|
47
|
+
function validatePlatformerGameplayProof(spec, proof) {
|
|
48
|
+
const categoryProof = recordValue(proof.categoryProof);
|
|
49
|
+
const platformerProof = recordValue(categoryProof?.platformer);
|
|
50
|
+
const blockers = [];
|
|
51
|
+
if (platformerProof?.movementChangesPosition !== true)
|
|
52
|
+
blockers.push("evidence:gameplay-proof:platformer:movement-missing");
|
|
53
|
+
if (platformerProof?.jumpChangesState !== true)
|
|
54
|
+
blockers.push("evidence:gameplay-proof:platformer:jump-missing");
|
|
55
|
+
if (platformerProof?.checkpointProgression !== true)
|
|
56
|
+
blockers.push("evidence:gameplay-proof:platformer:checkpoint-missing");
|
|
57
|
+
if (platformerProof?.hazardRespawn !== true)
|
|
58
|
+
blockers.push("evidence:gameplay-proof:platformer:hazard-respawn-missing");
|
|
59
|
+
if (platformerProof?.finishProgression !== true)
|
|
60
|
+
blockers.push("evidence:gameplay-proof:platformer:finish-missing");
|
|
61
|
+
blockers.push(...validateVisualReviewEvidence("evidence:gameplay-proof:platformer", spec, platformerProof));
|
|
62
|
+
if (platformerProof?.styleCompatible !== true)
|
|
63
|
+
blockers.push("evidence:gameplay-proof:platformer:style-fit-missing");
|
|
64
|
+
if (platformerProof?.scaleCompatible !== true)
|
|
65
|
+
blockers.push("evidence:gameplay-proof:platformer:scale-fit-missing");
|
|
66
|
+
if (numberValue(platformerProof?.authoredPlayableSeconds) < (spec.platformer?.levelDesign.minPlayableSeconds ?? 30)) {
|
|
67
|
+
blockers.push(`evidence:gameplay-proof:platformer:authored-playable-seconds-too-low:${numberValue(platformerProof?.authoredPlayableSeconds)}`);
|
|
68
|
+
}
|
|
69
|
+
return blockers;
|
|
70
|
+
}
|
|
71
|
+
function validateVisualReviewEvidence(label, spec, proof) {
|
|
72
|
+
const blockers = [];
|
|
73
|
+
if (proof?.visualReviewPass !== true)
|
|
74
|
+
blockers.push(`${label}:visual-review-missing`);
|
|
75
|
+
const visualReviewEvidence = recordValue(proof?.visualReviewEvidence);
|
|
76
|
+
if (!visualReviewEvidence)
|
|
77
|
+
return [...blockers, `${label}:visual-review-evidence-missing`];
|
|
78
|
+
if (visualReviewEvidence.source !== "docs/project/showcase-visual-review.json") {
|
|
79
|
+
blockers.push(`${label}:visual-review-source-mismatch`);
|
|
80
|
+
}
|
|
81
|
+
if (visualReviewEvidence.verdict !== "pass") {
|
|
82
|
+
blockers.push(`${label}:visual-review-verdict-not-pass:${stringValue(visualReviewEvidence.verdict)}`);
|
|
83
|
+
}
|
|
84
|
+
if (!screenshotEvidenceIncludes(visualReviewEvidence, spec.evidence.routePrimaryScreenshot)) {
|
|
85
|
+
blockers.push(`${label}:visual-review-screenshot-mismatch`);
|
|
86
|
+
}
|
|
87
|
+
return blockers;
|
|
88
|
+
}
|
|
89
|
+
function screenshotEvidenceIncludes(visualReviewEvidence, screenshotPath) {
|
|
90
|
+
const screenshotEvidence = visualReviewEvidence.screenshotEvidence;
|
|
91
|
+
return Array.isArray(screenshotEvidence) && screenshotEvidence.some((path) => path === screenshotPath);
|
|
92
|
+
}
|
|
93
|
+
function recordValue(value) {
|
|
94
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
|
|
95
|
+
}
|
|
96
|
+
function numberValue(value) {
|
|
97
|
+
return typeof value === "number" && Number.isFinite(value) ? value : 0;
|
|
98
|
+
}
|
|
99
|
+
function stringValue(value) {
|
|
100
|
+
return typeof value === "string" && value.length > 0 ? value : "missing";
|
|
101
|
+
}
|
|
102
|
+
function isPositiveNumber(value) {
|
|
103
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
104
|
+
}
|
|
105
|
+
function isSha256String(value) {
|
|
106
|
+
return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=showcase-spec-gameplay-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"showcase-spec-gameplay-evidence.js","sourceRoot":"","sources":["../../../../packages/create-aura3d/src/showcase-spec-gameplay-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"showcase-spec-parser.d.ts","sourceRoot":"","sources":["../../../../packages/create-aura3d/src/showcase-spec-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAkBV,YAAY,EAIb,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA+C9D"}
|