@jgengine/react 0.17.0 → 0.18.1
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/CHANGELOG.md +130 -2
- package/dist/bars.js +2 -1
- package/dist/chat.d.ts +10 -2
- package/dist/chat.js +45 -5
- package/dist/hudFrame.js +2 -0
- package/dist/hudSkin.d.ts +29 -0
- package/dist/hudSkin.js +50 -0
- package/dist/hudSkinPreview.d.ts +4 -0
- package/dist/hudSkinPreview.js +31 -0
- package/dist/hudTheme.d.ts +4 -0
- package/dist/hudTheme.js +14 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/previewFixtures.js +14 -0
- package/dist/spriteClipPreview.d.ts +6 -0
- package/dist/spriteClipPreview.js +72 -0
- package/dist/standaloneChatPanel.d.ts +38 -0
- package/dist/standaloneChatPanel.js +55 -0
- package/dist/tileLayerPreview.d.ts +4 -0
- package/dist/tileLayerPreview.js +37 -0
- package/dist/useServerSession.d.ts +11 -0
- package/dist/useServerSession.js +37 -0
- package/package.json +2 -2
- package/skills/ce-handoff/SKILL.md +1 -1
- package/skills/jgengine/SKILL.md +2 -0
- package/skills/jgengine/api.md +98 -22
- package/skills/jgengine/capabilities.md +28 -0
- package/skills/jgengine-ui/SKILL.md +8 -0
- package/skills/jgengine-ui/api.md +127 -16
- package/skills/jgengine-ui/capabilities.md +21 -0
- package/skills/jgengine-ui/reference.md +3 -0
- package/skills/jgengine-ui/references/visual-scorecard.md +0 -73
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Visual scorecard
|
|
2
|
-
|
|
3
|
-
This repeatable 0–3 rubric makes "looks shipped" consistent across sessions and usable by a fresh-eyes reviewer. Apply it to milestone shots, not every tweak, and place the scored table beside PR screenshots.
|
|
4
|
-
|
|
5
|
-
Structure and thresholds adapted (concept only, reworded for this stack — not copied verbatim) from `majidmanzarpour/threejs-game-skills`' `visual-scorecard.md` (MIT); see `CREDITS.md`.
|
|
6
|
-
|
|
7
|
-
## The 0–3 scale
|
|
8
|
-
|
|
9
|
-
Score each category independently against what's actually in the shot, not what the code intends.
|
|
10
|
-
|
|
11
|
-
| Score | Meaning |
|
|
12
|
-
| --- | --- |
|
|
13
|
-
| **0** | Engine defaults or debug output. Untextured primitives, default grey material, flat ambient light, no sky/fog treatment, no authored placement. |
|
|
14
|
-
| **1** | Basic styled prototype. Readable and on-genre, but generic — solid-color materials, one light, sparse or untuned `AuthoredScene` content, no distinct silhouettes. |
|
|
15
|
-
| **2** | Premium stylized. Authored silhouettes on hero/obstacles, a coherent material system (not one grey PBR everywhere), tuned `environment()` lighting/sky/post, foliage and props placed through the editor read as a real place, not a demo. |
|
|
16
|
-
| **3** | Showcase art direction. Everything in 2, plus: no repeated silhouette anywhere in frame, deliberate foreground/midground/background composition, purposeful VFX and motion, a HUD that could not be mistaken for another game. Reads like a store page, not a build. |
|
|
17
|
-
|
|
18
|
-
## The 10 categories
|
|
19
|
-
|
|
20
|
-
Score all ten from one `--mode play` shot plus deterministic world/document evidence from `jgengine-verify`. Data presence is a prerequisite, not a substitute for visual judgment.
|
|
21
|
-
|
|
22
|
-
1. **Art direction** — one coherent palette and mood across ground, props, sky, and UI; not three unrelated hue choices stapled together.
|
|
23
|
-
2. **Hero/player** — an authored silhouette and material set the player is meant to be, not a default primitive or a capsule with an emissive glow standing in for a character.
|
|
24
|
-
3. **Obstacles/enemies** — distinct types read apart at a glance; not one mesh reused at different scales/colors.
|
|
25
|
-
4. **Rewards/interactables** — visually distinct from hazards and terrain at a glance, not the same proxy geometry as everything else.
|
|
26
|
-
5. **World/environment** — foreground, midground, and background read as separate layers (props/landmarks near camera, terrain shaping mid-distance, sky/fog treatment at the horizon); not one flat plane running to a bare horizon.
|
|
27
|
-
6. **Materials/textures** — terrain and props carry texture and color variation (`environment({ sculpt, materialRegions })`, catalog GLBs via `jgengine-assets`), not flat untextured solids.
|
|
28
|
-
7. **Lighting/render** — a tuned daylight/sun+hemisphere rig and post stack (per `look: "cinematic"`, #773), not the bare untouched three.js default light.
|
|
29
|
-
8. **VFX/motion** — particle/motion feedback tied to actual gameplay events (hits, pickups, weather), not absent, and not one looping default effect standing in everywhere.
|
|
30
|
-
9. **UI/HUD** — a game-specific `HudCanvas`/`HudPanel` composition with unique art direction; fails automatically if it could pass for a generic admin dashboard **or** for another game shipping stock engine widgets/theme presets unskinned.
|
|
31
|
-
10. **Performance evidence** — the look holds at the scale the game actually runs (`InstancedScatter` density, many entities), not only a hand-posed hero shot with three objects in frame.
|
|
32
|
-
|
|
33
|
-
## Measured-evidence row
|
|
34
|
-
|
|
35
|
-
Pixel metrics from `bun run shoot <id> --mode play --inspect` (or `bun run inspect-shot.ts <shot.png>` on an existing PNG — [#788](https://github.com/Noisemaker111/jgengine/issues/788), shipped) are the objective inputs to categories 5–7 — they don't replace the eye, they catch what a rushed glance misses. Output lands at `shots/<name>.metrics.json`:
|
|
36
|
-
|
|
37
|
-
| Metric | Threshold | Flags |
|
|
38
|
-
| --- | --- | --- |
|
|
39
|
-
| `colorEntropyBits` | `< 3.0` | sparse palette |
|
|
40
|
-
| `dominantColorShare` | `> 0.6` | sparse / one material dominates the frame |
|
|
41
|
-
| `edgeDensity` | `< 0.04` | primitive-dominant, too few silhouettes |
|
|
42
|
-
| `luminance.contrast` | `< 60` | fog/post compressing out real geometry |
|
|
43
|
-
|
|
44
|
-
Any metric over threshold caps the affected category at **1** regardless of how the shot reads by eye — the number is a floor, not a veto the eye can talk it out of. `--strict` hard-fails on a crossed threshold for CI; the scorecard itself always records this row from the JSON, never "not measured."
|
|
45
|
-
|
|
46
|
-
## Pass thresholds
|
|
47
|
-
|
|
48
|
-
- **Premium**: every category ≥ 2, average ≥ 2.3.
|
|
49
|
-
- **Showcase**: at least 6 categories at 3, no category < 2, average ≥ 2.7.
|
|
50
|
-
|
|
51
|
-
Below "premium" on a claimed milestone is not shippable; keep working the art stack or narrow the claim.
|
|
52
|
-
|
|
53
|
-
## Automatic failures
|
|
54
|
-
|
|
55
|
-
Any one of these fails the shot regardless of the averaged score:
|
|
56
|
-
|
|
57
|
-
- **Primitive-dominant shots** — untextured boxes/spheres/cylinders make up the visible mass of the frame.
|
|
58
|
-
- **Default primitive + glow standing in for a hero** — an emissive-glow capsule/sphere is not a character, even at full brightness.
|
|
59
|
-
- **One repeated silhouette everywhere** — `InstancedScatter`'s stylized proxy species (or any single catalog model) used with no palette variety across the whole visible world.
|
|
60
|
-
- **Fog/bloom hiding missing geometry** — atmosphere used to obscure an empty or unfinished scene instead of to add depth to a populated one.
|
|
61
|
-
- **No active-play shot** — only editor/menu/poster shots submitted. `--mode play` (or `drive` past the menu) evidence is mandatory; a scene that only looks good in the editor camera hasn't proven anything about how the game actually reads.
|
|
62
|
-
|
|
63
|
-
## Fresh-eyes review and the lower-score rule
|
|
64
|
-
|
|
65
|
-
Hand a reviewer **only** the screenshots, this rubric, and the measured-evidence JSON — no PR description, no "here's what I was going for." A reviewer who knows the intent scores the intent; a fresh reviewer scores the pixels, which is the only thing a player ever sees.
|
|
66
|
-
|
|
67
|
-
- The author scores first (self-score).
|
|
68
|
-
- A fresh-eyes pass (a different session, or the same session after clearing framing context) scores independently.
|
|
69
|
-
- Where the two disagree, **the PR carries the lower score**, never the average and never the higher one. Optimistic self-scoring is the failure mode this guards against — take the lower number and keep working the art stack instead of arguing the rubric.
|
|
70
|
-
|
|
71
|
-
## Using this in a PR
|
|
72
|
-
|
|
73
|
-
Any PR that changes what a player sees pastes the ten-category table (score + one-line reason per category below 2), the measured-evidence row, and the reconciled score next to embedded screenshots. Report that verdict through `jgengine-verify`'s evidence format.
|