diff --git a/src/main/java/com/tiedup/remake/client/animation/context/GlbAnimationResolver.java b/src/main/java/com/tiedup/remake/client/animation/context/GlbAnimationResolver.java index 45d9651..d2b79ce 100644 --- a/src/main/java/com/tiedup/remake/client/animation/context/GlbAnimationResolver.java +++ b/src/main/java/com/tiedup/remake/client/animation/context/GlbAnimationResolver.java @@ -72,34 +72,43 @@ public final class GlbAnimationResolver { String prefix = context.getGlbContextPrefix(); // "Sit", "Kneel", "Sneak", "Walk", "" String variant = context.getGlbVariant(); // "Idle" or "Struggle" - // 1. Exact match: "FullSitIdle" then "SitIdle" (with variants) + // 1. Exact match: "FullHeadSitIdle" then "FullSitIdle" then "SitIdle" (with variants) + // FullHead variants opt-in to head animation (see GltfPoseConverter.enableSelectiveParts) String exact = prefix + variant; if (!exact.isEmpty()) { - String picked = pickWithVariants(data, "Full" + exact); + String picked = pickWithVariants(data, "FullHead" + exact); + if (picked != null) return picked; + picked = pickWithVariants(data, "Full" + exact); if (picked != null) return picked; picked = pickWithVariants(data, exact); if (picked != null) return picked; } - // 2. For struggles: try "FullStruggle" then "Struggle" (with variants) + // 2. For struggles: try "FullHeadStruggle" then "FullStruggle" then "Struggle" (with variants) if (context.isStruggling()) { - String picked = pickWithVariants(data, "FullStruggle"); + String picked = pickWithVariants(data, "FullHeadStruggle"); + if (picked != null) return picked; + picked = pickWithVariants(data, "FullStruggle"); if (picked != null) return picked; picked = pickWithVariants(data, "Struggle"); if (picked != null) return picked; } - // 3. Context-only: "FullSit" then "Sit" (with variants) + // 3. Context-only: "FullHead{prefix}" then "Full{prefix}" then "{prefix}" (with variants) if (!prefix.isEmpty()) { - String picked = pickWithVariants(data, "Full" + prefix); + String picked = pickWithVariants(data, "FullHead" + prefix); + if (picked != null) return picked; + picked = pickWithVariants(data, "Full" + prefix); if (picked != null) return picked; picked = pickWithVariants(data, prefix); if (picked != null) return picked; } - // 4. Variant-only: "FullIdle" then "Idle" (with variants) + // 4. Variant-only: "FullHeadIdle" then "FullIdle" then "Idle" (with variants) { - String picked = pickWithVariants(data, "Full" + variant); + String picked = pickWithVariants(data, "FullHead" + variant); + if (picked != null) return picked; + picked = pickWithVariants(data, "Full" + variant); if (picked != null) return picked; picked = pickWithVariants(data, variant); if (picked != null) return picked;