@genex-ai/cli-demo 0.58.0-dev.132 → 0.59.0-dev.133
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/package.json +1 -1
- package/templates/controllers/character/character-animations.ts +8 -1
- package/templates/controllers/character/meshy/meshy-loader.ts +1 -1
- package/templates/skills/genex-ai-character/SKILL.md +9 -1
- package/templates/skills/genex-threejs-character-controller/SKILL.md +5 -0
- package/templates/skills/genex-threejs-visual-validation/SKILL.md +6 -1
package/package.json
CHANGED
|
@@ -351,6 +351,7 @@ export class CharacterAnimations {
|
|
|
351
351
|
// Every provided clip by name — lets playOneShot reach clips beyond the 9
|
|
352
352
|
// locomotion states (any installed pack clip: Punch_*, Sword_*, Sitting_*…).
|
|
353
353
|
#clipsByName = new Map<string, THREE.AnimationClip>();
|
|
354
|
+
#missingOneShotWarnings = new Set<string>();
|
|
354
355
|
#oneShotAction: THREE.AnimationAction | null = null;
|
|
355
356
|
#locomotionOneShotAction: THREE.AnimationAction | null = null;
|
|
356
357
|
#oneShotOnDone: (() => void) | undefined;
|
|
@@ -615,7 +616,13 @@ export class CharacterAnimations {
|
|
|
615
616
|
playOneShot(clipName: string, options: PlayOneShotOptions = {}): boolean {
|
|
616
617
|
if (this.#disposed) return false;
|
|
617
618
|
const clip = this.#clipsByName.get(clipName);
|
|
618
|
-
if (!clip)
|
|
619
|
+
if (!clip) {
|
|
620
|
+
if (!this.#missingOneShotWarnings.has(clipName)) {
|
|
621
|
+
this.#missingOneShotWarnings.add(clipName);
|
|
622
|
+
console.warn(`[character-animations] one-shot clip "${clipName}" is not installed; playOneShot() returned false.`);
|
|
623
|
+
}
|
|
624
|
+
return false;
|
|
625
|
+
}
|
|
619
626
|
|
|
620
627
|
const action = this.mixer.clipAction(clip);
|
|
621
628
|
|
|
@@ -139,7 +139,7 @@ export function resolveMeshyLocomotion(
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
export async function loadMeshyCharacter(manifestUrl: string): Promise<MeshyCharacter> {
|
|
142
|
-
const response = await fetch(manifestUrl);
|
|
142
|
+
const response = await fetch(manifestUrl, { cache: "no-store" });
|
|
143
143
|
if (!response.ok) throw new Error(`[meshy-character] ${manifestUrl} returned HTTP ${response.status}`);
|
|
144
144
|
const manifest = validateManifest(await response.json());
|
|
145
145
|
const loader = new GLTFLoader();
|
|
@@ -17,7 +17,9 @@ npx genex character "stylized desert courier, practical layered clothing"
|
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
The default request uses Meshy 6 to generate and texture an A-pose humanoid,
|
|
20
|
-
|
|
20
|
+
validates the rig's arm pose, and retries the full generation once in a strict
|
|
21
|
+
T-pose before requesting controller-pack animations when the A-pose is invalid.
|
|
22
|
+
It remeshes and rigs the accepted model, adds the preview-reviewed neutral-v2
|
|
21
23
|
idle/walk/run/crouch/jump controller pack,
|
|
22
24
|
and stores every successful model
|
|
23
25
|
and clip at permanent Genex asset URLs. It prints the complete Genex-credit
|
|
@@ -75,6 +77,12 @@ animation job completes, rerun `genex controller character --character <id>`
|
|
|
75
77
|
to refresh `public/assets/meshy-character.json`; existing controller source is
|
|
76
78
|
preserved unless `--force` is explicitly used.
|
|
77
79
|
|
|
80
|
+
Meshy manifests bypass browser cache, so newly installed actions must work
|
|
81
|
+
after preview without asking the player to disable cache.
|
|
82
|
+
|
|
83
|
+
`playOneShot()` returns false and emits one warning when a requested clip is
|
|
84
|
+
absent; treat that as an installation failure, not a successful action.
|
|
85
|
+
|
|
78
86
|
Load `$genex-threejs-character-controller` for the actual wiring. The install
|
|
79
87
|
command copies the shared controller plus `character/meshy/meshy-loader.ts`.
|
|
80
88
|
The manifest points at the current rigged model and compact animation-only GLBs
|
|
@@ -45,6 +45,11 @@ dynamic controller stays authoritative for collision, grounding, facing, and
|
|
|
45
45
|
world translation. The animation layer poses the visual rig; it never
|
|
46
46
|
translates the visual root.
|
|
47
47
|
|
|
48
|
+
Meshy manifests bypass browser cache, so newly installed actions must work
|
|
49
|
+
after preview without asking the player to disable cache. `playOneShot()`
|
|
50
|
+
returns false and emits one warning when a requested clip is absent; treat
|
|
51
|
+
that as an installation failure, not a successful action.
|
|
52
|
+
|
|
48
53
|
Because these files are game-owned, never run `genex controller character --force` over an edited
|
|
49
54
|
fork as a migration strategy. Install a fresh copy elsewhere and port only the named changes.
|
|
50
55
|
|
|
@@ -47,8 +47,13 @@ everything twice.
|
|
|
47
47
|
fires. For an animated character, capture idle, walk, run, crouch-idle,
|
|
48
48
|
crouch-move, and jump. Inspect shoulders, elbows, wrists, and hands as well
|
|
49
49
|
as the feet: a fully bound non-T-pose can still be stylistically broken.
|
|
50
|
+
Reject shrugging palms-up poses, permanently raised elbows, or a gait whose
|
|
51
|
+
upper-body style contradicts the requested character. “No T-pose” is not
|
|
52
|
+
an animation-quality check.
|
|
50
53
|
For Meshy characters, crouch passes only when the capsule behavior and a
|
|
51
|
-
visibly crouched pose both respond.
|
|
54
|
+
visibly crouched pose both respond. If a control calls `playOneShot()`, a
|
|
55
|
+
false result or missing-clip warning is an installation failure even when
|
|
56
|
+
locomotion continues normally.
|
|
52
57
|
3. Capture one screenshot of live gameplay — of the **game**, not a sign-in
|
|
53
58
|
gate or loading screen. A capture of the SDK's "Sign in to play" overlay is
|
|
54
59
|
NOT gameplay evidence. Evidence captured in local test mode must be labeled
|