@pixiv/three-vrm-springbone 3.1.0 → 3.1.2

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.
@@ -1,2 +1,2 @@
1
1
  /*! (c) 2019-2024 pixiv Inc. - https://github.com/pixiv/three-vrm/blob/release/LICENSE */
2
- var Q=(a,t,e)=>new Promise((r,i)=>{var o=s=>{try{l(e.next(s))}catch(d){i(d)}},n=s=>{try{l(e.throw(s))}catch(d){i(d)}},l=s=>s.done?r(s.value):Promise.resolve(s.value).then(o,n);l((e=e.apply(a,t)).next())});import*as P from"three";import*as K from"three";var w=class{};var de=new K.Vector3,j=new K.Vector3,X=class extends w{get type(){return"capsule"}constructor(t){var e,r,i,o;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new K.Vector3(0,0,0),this.tail=(r=t==null?void 0:t.tail)!=null?r:new K.Vector3(0,0,0),this.radius=(i=t==null?void 0:t.radius)!=null?i:0,this.inside=(o=t==null?void 0:t.inside)!=null?o:!1}calculateCollision(t,e,r,i){de.copy(this.offset).applyMatrix4(t),j.copy(this.tail).applyMatrix4(t),j.sub(de);let o=j.lengthSq();i.copy(e).sub(de);let n=j.dot(i);n<=0||(o<=n||j.multiplyScalar(n/o),i.sub(j));let l=this.inside?this.radius-r-i.length():i.length()-r-this.radius;return i.normalize(),this.inside&&i.negate(),l}};import*as F from"three";var he=new F.Vector3,ge=new F.Matrix3,Y=class extends w{get type(){return"plane"}constructor(t){var e,r;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new F.Vector3(0,0,0),this.normal=(r=t==null?void 0:t.normal)!=null?r:new F.Vector3(0,0,1)}calculateCollision(t,e,r,i){i.copy(this.offset).applyMatrix4(t),i.negate().add(e),ge.getNormalMatrix(t),he.copy(this.normal).applyNormalMatrix(ge).normalize();let o=i.dot(he)-r;return i.copy(he),o}};import*as Te from"three";var U=class extends w{get type(){return"sphere"}constructor(t){var e,r,i;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new Te.Vector3(0,0,0),this.radius=(r=t==null?void 0:t.radius)!=null?r:0,this.inside=(i=t==null?void 0:t.inside)!=null?i:!1}calculateCollision(t,e,r,i){i.copy(this.offset).applyMatrix4(t),i.negate().add(e);let o=this.inside?this.radius-r-i.length():i.length()-r-this.radius;return i.normalize(),this.inside&&i.negate(),o}};import*as V from"three";var y=new V.Vector3,oe=class extends V.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentOffset=new V.Vector3;this._currentTail=new V.Vector3;this._shape=e,this._attrPos=new V.BufferAttribute(new Float32Array(396),3),this.setAttribute("position",this._attrPos),this._attrIndex=new V.BufferAttribute(new Uint16Array(264),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._shape.radius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0);let i=y.copy(this._shape.tail).divideScalar(this.worldScale);this._currentTail.distanceToSquared(i)>1e-10&&(this._currentTail.copy(i),e=!0),e&&this._buildPosition()}_buildPosition(){y.copy(this._currentTail).sub(this._currentOffset);let e=y.length()/this._currentRadius;for(let o=0;o<=16;o++){let n=o/16*Math.PI;this._attrPos.setXYZ(o,-Math.sin(n),-Math.cos(n),0),this._attrPos.setXYZ(17+o,e+Math.sin(n),Math.cos(n),0),this._attrPos.setXYZ(34+o,-Math.sin(n),0,-Math.cos(n)),this._attrPos.setXYZ(51+o,e+Math.sin(n),0,Math.cos(n))}for(let o=0;o<32;o++){let n=o/16*Math.PI;this._attrPos.setXYZ(68+o,0,Math.sin(n),Math.cos(n)),this._attrPos.setXYZ(100+o,e,Math.sin(n),Math.cos(n))}let r=Math.atan2(y.y,Math.sqrt(y.x*y.x+y.z*y.z)),i=-Math.atan2(y.z,y.x);this.rotateZ(r),this.rotateY(i),this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<34;e++){let r=(e+1)%34;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(68+e*2,34+e,34+r)}for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(136+e*2,68+e,68+r),this._attrIndex.setXY(200+e*2,100+e,100+r)}this._attrIndex.needsUpdate=!0}};import*as C from"three";var ne=class extends C.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentOffset=new C.Vector3;this._currentNormal=new C.Vector3;this._shape=e,this._attrPos=new C.BufferAttribute(new Float32Array(6*3),3),this.setAttribute("position",this._attrPos),this._attrIndex=new C.BufferAttribute(new Uint16Array(10),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1;this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0),this._currentNormal.equals(this._shape.normal)||(this._currentNormal.copy(this._shape.normal),e=!0),e&&this._buildPosition()}_buildPosition(){this._attrPos.setXYZ(0,-.5,-.5,0),this._attrPos.setXYZ(1,.5,-.5,0),this._attrPos.setXYZ(2,.5,.5,0),this._attrPos.setXYZ(3,-.5,.5,0),this._attrPos.setXYZ(4,0,0,0),this._attrPos.setXYZ(5,0,0,.25),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this.lookAt(this._currentNormal),this._attrPos.needsUpdate=!0}_buildIndex(){this._attrIndex.setXY(0,0,1),this._attrIndex.setXY(2,1,2),this._attrIndex.setXY(4,2,3),this._attrIndex.setXY(6,3,0),this._attrIndex.setXY(8,4,5),this._attrIndex.needsUpdate=!0}};import*as D from"three";var se=class extends D.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentOffset=new D.Vector3;this._shape=e,this._attrPos=new D.BufferAttribute(new Float32Array(32*3*3),3),this.setAttribute("position",this._attrPos),this._attrIndex=new D.BufferAttribute(new Uint16Array(64*3),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._shape.radius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0),e&&this._buildPosition()}_buildPosition(){for(let e=0;e<32;e++){let r=e/16*Math.PI;this._attrPos.setXYZ(e,Math.cos(r),Math.sin(r),0),this._attrPos.setXYZ(32+e,0,Math.cos(r),Math.sin(r)),this._attrPos.setXYZ(64+e,Math.sin(r),0,Math.cos(r))}this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(64+e*2,32+e,32+r),this._attrIndex.setXY(128+e*2,64+e,64+r)}this._attrIndex.needsUpdate=!0}};var we=new P.Vector3,J=class extends P.Group{constructor(t){if(super(),this.matrixAutoUpdate=!1,this.collider=t,this.collider.shape instanceof U)this._geometry=new se(this.collider.shape);else if(this.collider.shape instanceof X)this._geometry=new oe(this.collider.shape);else if(this.collider.shape instanceof Y)this._geometry=new ne(this.collider.shape);else throw new Error("VRMSpringBoneColliderHelper: Unknown collider shape type detected");let e=new P.LineBasicMaterial({color:16711935,depthTest:!1,depthWrite:!1});this._line=new P.LineSegments(this._geometry,e),this.add(this._line)}dispose(){this._geometry.dispose()}updateMatrixWorld(t){this.collider.updateWorldMatrix(!0,!1),this.matrix.copy(this.collider.matrixWorld);let e=this.matrix.elements;this._geometry.worldScale=we.set(e[0],e[1],e[2]).length(),this._geometry.update(),super.updateMatrixWorld(t)}};import*as I from"three";import*as G from"three";var ae=class extends G.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentTail=new G.Vector3;this._springBone=e,this._attrPos=new G.BufferAttribute(new Float32Array(294),3),this.setAttribute("position",this._attrPos),this._attrIndex=new G.BufferAttribute(new Uint16Array(194),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._springBone.settings.hitRadius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentTail.equals(this._springBone.initialLocalChildPosition)||(this._currentTail.copy(this._springBone.initialLocalChildPosition),e=!0),e&&this._buildPosition()}_buildPosition(){for(let e=0;e<32;e++){let r=e/16*Math.PI;this._attrPos.setXYZ(e,Math.cos(r),Math.sin(r),0),this._attrPos.setXYZ(32+e,0,Math.cos(r),Math.sin(r)),this._attrPos.setXYZ(64+e,Math.sin(r),0,Math.cos(r))}this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentTail.x,this._currentTail.y,this._currentTail.z),this._attrPos.setXYZ(96,0,0,0),this._attrPos.setXYZ(97,this._currentTail.x,this._currentTail.y,this._currentTail.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(64+e*2,32+e,32+r),this._attrIndex.setXY(128+e*2,64+e,64+r)}this._attrIndex.setXY(192,96,97),this._attrIndex.needsUpdate=!0}};var Ce=new I.Vector3,ee=class extends I.Group{constructor(t){super(),this.matrixAutoUpdate=!1,this.springBone=t,this._geometry=new ae(this.springBone);let e=new I.LineBasicMaterial({color:16776960,depthTest:!1,depthWrite:!1});this._line=new I.LineSegments(this._geometry,e),this.add(this._line)}dispose(){this._geometry.dispose()}updateMatrixWorld(t){this.springBone.bone.updateWorldMatrix(!0,!1),this.matrix.copy(this.springBone.bone.matrixWorld);let e=this.matrix.elements;this._geometry.worldScale=Ce.set(e[0],e[1],e[2]).length(),this._geometry.update(),super.updateMatrixWorld(t)}};import*as Me from"three";var N=class extends Me.Object3D{constructor(t){super(),this.shape=t}};import*as c from"three";import*as xe from"three";var Pe=new xe.Matrix4;function le(a){return a.invert?a.invert():a.getInverse(Pe.copy(a)),a}import*as be from"three";var pe=class{constructor(t){this._inverseCache=new be.Matrix4;this._shouldUpdateInverse=!0;this.matrix=t;let e={set:(r,i,o)=>(this._shouldUpdateInverse=!0,r[i]=o,!0)};this._originalElements=t.elements,t.elements=new Proxy(t.elements,e)}get inverse(){return this._shouldUpdateInverse&&(le(this._inverseCache.copy(this.matrix)),this._shouldUpdateInverse=!1),this._inverseCache}revert(){this.matrix.elements=this._originalElements}};var Ie=new c.Matrix4,v=new c.Vector3,te=new c.Vector3,Oe=new c.Vector3,z=new c.Vector3,ye=new c.Vector3,re=new c.Vector3,He=new c.Quaternion,Z=new c.Matrix4,Ae=new c.Matrix4,ce=class{constructor(t,e,r={},i=[]){this._currentTail=new c.Vector3;this._prevTail=new c.Vector3;this._boneAxis=new c.Vector3;this._worldSpaceBoneLength=0;this._center=null;this._initialLocalMatrix=new c.Matrix4;this._initialLocalRotation=new c.Quaternion;this._initialLocalChildPosition=new c.Vector3;var o,n,l,s,d,g;this.bone=t,this.bone.matrixAutoUpdate=!1,this.child=e,this.settings={hitRadius:(o=r.hitRadius)!=null?o:0,stiffness:(n=r.stiffness)!=null?n:1,gravityPower:(l=r.gravityPower)!=null?l:0,gravityDir:(d=(s=r.gravityDir)==null?void 0:s.clone())!=null?d:new c.Vector3(0,-1,0),dragForce:(g=r.dragForce)!=null?g:.4},this.colliderGroups=i}get center(){return this._center}set center(t){var e;(e=this._center)!=null&&e.userData.inverseCacheProxy&&(this._center.userData.inverseCacheProxy.revert(),delete this._center.userData.inverseCacheProxy),this._center=t,this._center&&(this._center.userData.inverseCacheProxy||(this._center.userData.inverseCacheProxy=new pe(this._center.matrixWorld)))}get initialLocalChildPosition(){return this._initialLocalChildPosition}get _parentMatrixWorld(){return this.bone.parent?this.bone.parent.matrixWorld:Ie}setInitState(){this._initialLocalMatrix.copy(this.bone.matrix),this._initialLocalRotation.copy(this.bone.quaternion),this.child?this._initialLocalChildPosition.copy(this.child.position):this._initialLocalChildPosition.copy(this.bone.position).normalize().multiplyScalar(.07);let t=this._getMatrixWorldToCenter(Z);this.bone.localToWorld(this._currentTail.copy(this._initialLocalChildPosition)).applyMatrix4(t),this._prevTail.copy(this._currentTail),this._boneAxis.copy(this._initialLocalChildPosition).normalize()}reset(){this.bone.quaternion.copy(this._initialLocalRotation),this.bone.updateMatrix(),this.bone.matrixWorld.multiplyMatrices(this._parentMatrixWorld,this.bone.matrix);let t=this._getMatrixWorldToCenter(Z);this.bone.localToWorld(this._currentTail.copy(this._initialLocalChildPosition)).applyMatrix4(t),this._prevTail.copy(this._currentTail)}update(t){if(t<=0)return;this._calcWorldSpaceBoneLength(),z.setFromMatrixPosition(this.bone.matrixWorld);let e=this._getMatrixWorldToCenter(Z);ye.copy(z).applyMatrix4(e);let r=He.setFromRotationMatrix(e),i=Ae.copy(e).multiply(this._parentMatrixWorld),o=te.copy(this._boneAxis).applyMatrix4(this._initialLocalMatrix).applyMatrix4(i).sub(ye).normalize(),n=Oe.copy(this.settings.gravityDir).applyQuaternion(r).normalize(),l=this._getMatrixCenterToWorld(Z);re.copy(this._currentTail).add(v.copy(this._currentTail).sub(this._prevTail).multiplyScalar(1-this.settings.dragForce)).add(v.copy(o).multiplyScalar(this.settings.stiffness*t)).add(v.copy(n).multiplyScalar(this.settings.gravityPower*t)).applyMatrix4(l),re.sub(z).normalize().multiplyScalar(this._worldSpaceBoneLength).add(z),this._collision(re),e=this._getMatrixWorldToCenter(Z),this._prevTail.copy(this._currentTail),this._currentTail.copy(v.copy(re).applyMatrix4(e));let s=le(Z.copy(this._parentMatrixWorld).multiply(this._initialLocalMatrix)),d=He.setFromUnitVectors(this._boneAxis,v.copy(re).applyMatrix4(s).normalize());this.bone.quaternion.copy(this._initialLocalRotation).multiply(d),this.bone.updateMatrix(),this.bone.matrixWorld.multiplyMatrices(this._parentMatrixWorld,this.bone.matrix)}_collision(t){this.colliderGroups.forEach(e=>{e.colliders.forEach(r=>{let i=r.shape.calculateCollision(r.matrixWorld,t,this.settings.hitRadius,v);i<0&&(t.add(v.multiplyScalar(-i)),t.sub(z).normalize().multiplyScalar(this._worldSpaceBoneLength).add(z))})})}_calcWorldSpaceBoneLength(){v.setFromMatrixPosition(this.bone.matrixWorld),this.child?te.setFromMatrixPosition(this.child.matrixWorld):(te.copy(this._initialLocalChildPosition),te.applyMatrix4(this.bone.matrixWorld)),this._worldSpaceBoneLength=v.sub(te).length()}_getMatrixCenterToWorld(t){return this._center?t.copy(this._center.matrixWorld):t.identity(),t}_getMatrixWorldToCenter(t){return this._center?t.copy(this._center.userData.inverseCacheProxy.inverse):t.identity(),t}};import*as S from"three";function Ve(a,t){let e=[],r=a;for(;r!==null;)e.unshift(r),r=r.parent;e.forEach(i=>{t(i)})}function ue(a,t){a.children.forEach(e=>{t(e)||ue(e,t)})}var ie=class{constructor(){this._joints=new Set;this._objectSpringBonesMap=new Map}get joints(){return this._joints}get springBones(){return console.warn("VRMSpringBoneManager: springBones is deprecated. use joints instead."),this._joints}get colliderGroups(){let t=new Set;return this._joints.forEach(e=>{e.colliderGroups.forEach(r=>{t.add(r)})}),Array.from(t)}get colliders(){let t=new Set;return this.colliderGroups.forEach(e=>{e.colliders.forEach(r=>{t.add(r)})}),Array.from(t)}addJoint(t){this._joints.add(t);let e=this._objectSpringBonesMap.get(t.bone);e==null&&(e=new Set,this._objectSpringBonesMap.set(t.bone,e)),e.add(t)}addSpringBone(t){console.warn("VRMSpringBoneManager: addSpringBone() is deprecated. use addJoint() instead."),this.addJoint(t)}deleteJoint(t){this._joints.delete(t),this._objectSpringBonesMap.get(t.bone).delete(t)}deleteSpringBone(t){console.warn("VRMSpringBoneManager: deleteSpringBone() is deprecated. use deleteJoint() instead."),this.deleteJoint(t)}setInitState(){let t=new Set,e=new Set,r=new Set;for(let i of this._joints)this._processSpringBone(i,t,e,r,o=>o.setInitState())}reset(){let t=new Set,e=new Set,r=new Set;for(let i of this._joints)this._processSpringBone(i,t,e,r,o=>o.reset())}update(t){let e=new Set,r=new Set,i=new Set;for(let o of this._joints)this._processSpringBone(o,e,r,i,n=>n.update(t)),ue(o.bone,n=>{var l,s;return((s=(l=this._objectSpringBonesMap.get(n))==null?void 0:l.size)!=null?s:0)>0?!0:(n.updateWorldMatrix(!1,!1),!1)})}_processSpringBone(t,e,r,i,o){if(r.has(t))return;if(e.has(t))throw new Error("VRMSpringBoneManager: Circular dependency detected while updating springbones");e.add(t);let n=this._getDependencies(t);for(let l of n)Ve(l,s=>{let d=this._objectSpringBonesMap.get(s);if(d)for(let g of d)this._processSpringBone(g,e,r,i,o);else i.has(s)||(s.updateWorldMatrix(!1,!1),i.add(s))});t.bone.updateMatrix(),t.bone.updateWorldMatrix(!1,!1),o(t),i.add(t.bone),r.add(t)}_getDependencies(t){let e=new Set,r=t.bone.parent;return r&&e.add(r),t.colliderGroups.forEach(i=>{i.colliders.forEach(o=>{e.add(o)})}),e}};var ve="VRMC_springBone_extended_collider",Le=new Set(["1.0","1.0-beta"]),je=new Set(["1.0"]),O=class O{get name(){return O.EXTENSION_NAME}constructor(t,e){var r;this.parser=t,this.jointHelperRoot=e==null?void 0:e.jointHelperRoot,this.colliderHelperRoot=e==null?void 0:e.colliderHelperRoot,this.useExtendedColliders=(r=e==null?void 0:e.useExtendedColliders)!=null?r:!0}afterRoot(t){return Q(this,null,function*(){t.userData.vrmSpringBoneManager=yield this._import(t)})}_import(t){return Q(this,null,function*(){let e=yield this._v1Import(t);if(e!=null)return e;let r=yield this._v0Import(t);return r!=null?r:null})}_v1Import(t){return Q(this,null,function*(){var g,q,$,h,W;let e=t.parser.json;if(!(((g=e.extensionsUsed)==null?void 0:g.indexOf(O.EXTENSION_NAME))!==-1))return null;let i=new ie,o=yield t.parser.getDependencies("node"),n=(q=e.extensions)==null?void 0:q[O.EXTENSION_NAME];if(!n)return null;let l=n.specVersion;if(!Le.has(l))return console.warn(`VRMSpringBoneLoaderPlugin: Unknown ${O.EXTENSION_NAME} specVersion "${l}"`),null;let s=($=n.colliders)==null?void 0:$.map((E,T)=>{var p,M,_,x,A,L,b,H,B,k,fe,Ee,Re,_e,me;let u=o[E.node],f=E.shape,R=(p=E.extensions)==null?void 0:p[ve];if(this.useExtendedColliders&&R!=null){let Se=R.specVersion;if(!je.has(Se))console.warn(`VRMSpringBoneLoaderPlugin: Unknown ${ve} specVersion "${Se}". Fallbacking to the ${O.EXTENSION_NAME} definition`);else{let m=R.shape;if(m.sphere)return this._importSphereCollider(u,{offset:new S.Vector3().fromArray((M=m.sphere.offset)!=null?M:[0,0,0]),radius:(_=m.sphere.radius)!=null?_:0,inside:(x=m.sphere.inside)!=null?x:!1});if(m.capsule)return this._importCapsuleCollider(u,{offset:new S.Vector3().fromArray((A=m.capsule.offset)!=null?A:[0,0,0]),radius:(L=m.capsule.radius)!=null?L:0,tail:new S.Vector3().fromArray((b=m.capsule.tail)!=null?b:[0,0,0]),inside:(H=m.capsule.inside)!=null?H:!1});if(m.plane)return this._importPlaneCollider(u,{offset:new S.Vector3().fromArray((B=m.plane.offset)!=null?B:[0,0,0]),normal:new S.Vector3().fromArray((k=m.plane.normal)!=null?k:[0,0,1])})}}if(f.sphere)return this._importSphereCollider(u,{offset:new S.Vector3().fromArray((fe=f.sphere.offset)!=null?fe:[0,0,0]),radius:(Ee=f.sphere.radius)!=null?Ee:0,inside:!1});if(f.capsule)return this._importCapsuleCollider(u,{offset:new S.Vector3().fromArray((Re=f.capsule.offset)!=null?Re:[0,0,0]),radius:(_e=f.capsule.radius)!=null?_e:0,tail:new S.Vector3().fromArray((me=f.capsule.tail)!=null?me:[0,0,0]),inside:!1});throw new Error(`VRMSpringBoneLoaderPlugin: The collider #${T} has no valid shape`)}),d=(h=n.colliderGroups)==null?void 0:h.map((E,T)=>{var f;return{colliders:((f=E.colliders)!=null?f:[]).map(R=>{let p=s==null?void 0:s[R];if(p==null)throw new Error(`VRMSpringBoneLoaderPlugin: The colliderGroup #${T} attempted to use a collider #${R} but not found`);return p}),name:E.name}});return(W=n.springs)==null||W.forEach((E,T)=>{var M;let u=E.joints,f=(M=E.colliderGroups)==null?void 0:M.map(_=>{let x=d==null?void 0:d[_];if(x==null)throw new Error(`VRMSpringBoneLoaderPlugin: The spring #${T} attempted to use a colliderGroup ${_} but not found`);return x}),R=E.center!=null?o[E.center]:void 0,p;u.forEach(_=>{if(p){let x=p.node,A=o[x],L=_.node,b=o[L],H={hitRadius:p.hitRadius,dragForce:p.dragForce,gravityPower:p.gravityPower,stiffness:p.stiffness,gravityDir:p.gravityDir!=null?new S.Vector3().fromArray(p.gravityDir):void 0},B=this._importJoint(A,b,H,f);R&&(B.center=R),i.addJoint(B)}p=_})}),i.setInitState(),i})}_v0Import(t){return Q(this,null,function*(){var g,q,$;let e=t.parser.json;if(!(((g=e.extensionsUsed)==null?void 0:g.indexOf("VRM"))!==-1))return null;let i=(q=e.extensions)==null?void 0:q.VRM,o=i==null?void 0:i.secondaryAnimation;if(!o)return null;let n=o==null?void 0:o.boneGroups;if(!n)return null;let l=new ie,s=yield t.parser.getDependencies("node"),d=($=o.colliderGroups)==null?void 0:$.map(h=>{var T;let W=s[h.node];return{colliders:((T=h.colliders)!=null?T:[]).map((u,f)=>{var p,M,_;let R=new S.Vector3(0,0,0);return u.offset&&R.set((p=u.offset.x)!=null?p:0,(M=u.offset.y)!=null?M:0,u.offset.z?-u.offset.z:0),this._importSphereCollider(W,{offset:R,radius:(_=u.radius)!=null?_:0,inside:!1})})}});return n==null||n.forEach((h,W)=>{let E=h.bones;E&&E.forEach(T=>{var _,x,A,L;let u=s[T],f=new S.Vector3;h.gravityDir?f.set((_=h.gravityDir.x)!=null?_:0,(x=h.gravityDir.y)!=null?x:0,(A=h.gravityDir.z)!=null?A:0):f.set(0,-1,0);let R=h.center!=null?s[h.center]:void 0,p={hitRadius:h.hitRadius,dragForce:h.dragForce,gravityPower:h.gravityPower,stiffness:h.stiffiness,gravityDir:f},M=(L=h.colliderGroups)==null?void 0:L.map(b=>{let H=d==null?void 0:d[b];if(H==null)throw new Error(`VRMSpringBoneLoaderPlugin: The spring #${W} attempted to use a colliderGroup ${b} but not found`);return H});u.traverse(b=>{var k;let H=(k=b.children[0])!=null?k:null,B=this._importJoint(b,H,p,M);R&&(B.center=R),l.addJoint(B)})})}),t.scene.updateMatrixWorld(),l.setInitState(),l})}_importJoint(t,e,r,i){let o=new ce(t,e,r,i);if(this.jointHelperRoot){let n=new ee(o);this.jointHelperRoot.add(n),n.renderOrder=this.jointHelperRoot.renderOrder}return o}_importSphereCollider(t,e){let r=new U(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}_importCapsuleCollider(t,e){let r=new X(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}_importPlaneCollider(t,e){let r=new Y(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}};O.EXTENSION_NAME="VRMC_springBone";var Be=O;export{N as VRMSpringBoneCollider,J as VRMSpringBoneColliderHelper,w as VRMSpringBoneColliderShape,X as VRMSpringBoneColliderShapeCapsule,Y as VRMSpringBoneColliderShapePlane,U as VRMSpringBoneColliderShapeSphere,ce as VRMSpringBoneJoint,ee as VRMSpringBoneJointHelper,Be as VRMSpringBoneLoaderPlugin,ie as VRMSpringBoneManager};
2
+ var Q=(a,t,e)=>new Promise((r,i)=>{var o=s=>{try{l(e.next(s))}catch(d){i(d)}},n=s=>{try{l(e.throw(s))}catch(d){i(d)}},l=s=>s.done?r(s.value):Promise.resolve(s.value).then(o,n);l((e=e.apply(a,t)).next())});import*as P from"three";import*as K from"three";var w=class{};var de=new K.Vector3,L=new K.Vector3,X=class extends w{get type(){return"capsule"}constructor(t){var e,r,i,o;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new K.Vector3(0,0,0),this.tail=(r=t==null?void 0:t.tail)!=null?r:new K.Vector3(0,0,0),this.radius=(i=t==null?void 0:t.radius)!=null?i:0,this.inside=(o=t==null?void 0:t.inside)!=null?o:!1}calculateCollision(t,e,r,i){de.copy(this.offset).applyMatrix4(t),L.copy(this.tail).applyMatrix4(t),L.sub(de);let o=L.lengthSq();i.copy(e).sub(de);let n=L.dot(i);n<=0||(o<=n||L.multiplyScalar(n/o),i.sub(L));let l=this.inside?this.radius-r-i.length():i.length()-r-this.radius;return i.normalize(),this.inside&&i.negate(),l}};import*as F from"three";var he=new F.Vector3,ge=new F.Matrix3,Y=class extends w{get type(){return"plane"}constructor(t){var e,r;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new F.Vector3(0,0,0),this.normal=(r=t==null?void 0:t.normal)!=null?r:new F.Vector3(0,0,1)}calculateCollision(t,e,r,i){i.copy(this.offset).applyMatrix4(t),i.negate().add(e),ge.getNormalMatrix(t),he.copy(this.normal).applyNormalMatrix(ge).normalize();let o=i.dot(he)-r;return i.copy(he),o}};import*as Te from"three";var U=class extends w{get type(){return"sphere"}constructor(t){var e,r,i;super(),this.offset=(e=t==null?void 0:t.offset)!=null?e:new Te.Vector3(0,0,0),this.radius=(r=t==null?void 0:t.radius)!=null?r:0,this.inside=(i=t==null?void 0:t.inside)!=null?i:!1}calculateCollision(t,e,r,i){i.copy(this.offset).applyMatrix4(t),i.negate().add(e);let o=this.inside?this.radius-r-i.length():i.length()-r-this.radius;return i.normalize(),this.inside&&i.negate(),o}};import*as V from"three";var y=new V.Vector3,oe=class extends V.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentOffset=new V.Vector3;this._currentTail=new V.Vector3;this._shape=e,this._attrPos=new V.BufferAttribute(new Float32Array(396),3),this.setAttribute("position",this._attrPos),this._attrIndex=new V.BufferAttribute(new Uint16Array(264),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._shape.radius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0);let i=y.copy(this._shape.tail).divideScalar(this.worldScale);this._currentTail.distanceToSquared(i)>1e-10&&(this._currentTail.copy(i),e=!0),e&&this._buildPosition()}_buildPosition(){y.copy(this._currentTail).sub(this._currentOffset);let e=y.length()/this._currentRadius;for(let o=0;o<=16;o++){let n=o/16*Math.PI;this._attrPos.setXYZ(o,-Math.sin(n),-Math.cos(n),0),this._attrPos.setXYZ(17+o,e+Math.sin(n),Math.cos(n),0),this._attrPos.setXYZ(34+o,-Math.sin(n),0,-Math.cos(n)),this._attrPos.setXYZ(51+o,e+Math.sin(n),0,Math.cos(n))}for(let o=0;o<32;o++){let n=o/16*Math.PI;this._attrPos.setXYZ(68+o,0,Math.sin(n),Math.cos(n)),this._attrPos.setXYZ(100+o,e,Math.sin(n),Math.cos(n))}let r=Math.atan2(y.y,Math.sqrt(y.x*y.x+y.z*y.z)),i=-Math.atan2(y.z,y.x);this.rotateZ(r),this.rotateY(i),this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<34;e++){let r=(e+1)%34;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(68+e*2,34+e,34+r)}for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(136+e*2,68+e,68+r),this._attrIndex.setXY(200+e*2,100+e,100+r)}this._attrIndex.needsUpdate=!0}};import*as C from"three";var ne=class extends C.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentOffset=new C.Vector3;this._currentNormal=new C.Vector3;this._shape=e,this._attrPos=new C.BufferAttribute(new Float32Array(6*3),3),this.setAttribute("position",this._attrPos),this._attrIndex=new C.BufferAttribute(new Uint16Array(10),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1;this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0),this._currentNormal.equals(this._shape.normal)||(this._currentNormal.copy(this._shape.normal),e=!0),e&&this._buildPosition()}_buildPosition(){this._attrPos.setXYZ(0,-.5,-.5,0),this._attrPos.setXYZ(1,.5,-.5,0),this._attrPos.setXYZ(2,.5,.5,0),this._attrPos.setXYZ(3,-.5,.5,0),this._attrPos.setXYZ(4,0,0,0),this._attrPos.setXYZ(5,0,0,.25),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this.lookAt(this._currentNormal),this._attrPos.needsUpdate=!0}_buildIndex(){this._attrIndex.setXY(0,0,1),this._attrIndex.setXY(2,1,2),this._attrIndex.setXY(4,2,3),this._attrIndex.setXY(6,3,0),this._attrIndex.setXY(8,4,5),this._attrIndex.needsUpdate=!0}};import*as j from"three";var se=class extends j.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentOffset=new j.Vector3;this._shape=e,this._attrPos=new j.BufferAttribute(new Float32Array(32*3*3),3),this.setAttribute("position",this._attrPos),this._attrIndex=new j.BufferAttribute(new Uint16Array(64*3),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._shape.radius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentOffset.equals(this._shape.offset)||(this._currentOffset.copy(this._shape.offset),e=!0),e&&this._buildPosition()}_buildPosition(){for(let e=0;e<32;e++){let r=e/16*Math.PI;this._attrPos.setXYZ(e,Math.cos(r),Math.sin(r),0),this._attrPos.setXYZ(32+e,0,Math.cos(r),Math.sin(r)),this._attrPos.setXYZ(64+e,Math.sin(r),0,Math.cos(r))}this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentOffset.x,this._currentOffset.y,this._currentOffset.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(64+e*2,32+e,32+r),this._attrIndex.setXY(128+e*2,64+e,64+r)}this._attrIndex.needsUpdate=!0}};var we=new P.Vector3,J=class extends P.Group{constructor(t){if(super(),this.matrixAutoUpdate=!1,this.collider=t,this.collider.shape instanceof U)this._geometry=new se(this.collider.shape);else if(this.collider.shape instanceof X)this._geometry=new oe(this.collider.shape);else if(this.collider.shape instanceof Y)this._geometry=new ne(this.collider.shape);else throw new Error("VRMSpringBoneColliderHelper: Unknown collider shape type detected");let e=new P.LineBasicMaterial({color:16711935,depthTest:!1,depthWrite:!1});this._line=new P.LineSegments(this._geometry,e),this.add(this._line)}dispose(){this._geometry.dispose()}updateMatrixWorld(t){this.collider.updateWorldMatrix(!0,!1),this.matrix.copy(this.collider.matrixWorld);let e=this.matrix.elements;this._geometry.worldScale=we.set(e[0],e[1],e[2]).length(),this._geometry.update(),super.updateMatrixWorld(t)}};import*as I from"three";import*as W from"three";var ae=class extends W.BufferGeometry{constructor(e){super();this.worldScale=1;this._currentRadius=0;this._currentTail=new W.Vector3;this._springBone=e,this._attrPos=new W.BufferAttribute(new Float32Array(294),3),this.setAttribute("position",this._attrPos),this._attrIndex=new W.BufferAttribute(new Uint16Array(194),1),this.setIndex(this._attrIndex),this._buildIndex(),this.update()}update(){let e=!1,r=this._springBone.settings.hitRadius/this.worldScale;this._currentRadius!==r&&(this._currentRadius=r,e=!0),this._currentTail.equals(this._springBone.initialLocalChildPosition)||(this._currentTail.copy(this._springBone.initialLocalChildPosition),e=!0),e&&this._buildPosition()}_buildPosition(){for(let e=0;e<32;e++){let r=e/16*Math.PI;this._attrPos.setXYZ(e,Math.cos(r),Math.sin(r),0),this._attrPos.setXYZ(32+e,0,Math.cos(r),Math.sin(r)),this._attrPos.setXYZ(64+e,Math.sin(r),0,Math.cos(r))}this.scale(this._currentRadius,this._currentRadius,this._currentRadius),this.translate(this._currentTail.x,this._currentTail.y,this._currentTail.z),this._attrPos.setXYZ(96,0,0,0),this._attrPos.setXYZ(97,this._currentTail.x,this._currentTail.y,this._currentTail.z),this._attrPos.needsUpdate=!0}_buildIndex(){for(let e=0;e<32;e++){let r=(e+1)%32;this._attrIndex.setXY(e*2,e,r),this._attrIndex.setXY(64+e*2,32+e,32+r),this._attrIndex.setXY(128+e*2,64+e,64+r)}this._attrIndex.setXY(192,96,97),this._attrIndex.needsUpdate=!0}};var Ce=new I.Vector3,ee=class extends I.Group{constructor(t){super(),this.matrixAutoUpdate=!1,this.springBone=t,this._geometry=new ae(this.springBone);let e=new I.LineBasicMaterial({color:16776960,depthTest:!1,depthWrite:!1});this._line=new I.LineSegments(this._geometry,e),this.add(this._line)}dispose(){this._geometry.dispose()}updateMatrixWorld(t){this.springBone.bone.updateWorldMatrix(!0,!1),this.matrix.copy(this.springBone.bone.matrixWorld);let e=this.matrix.elements;this._geometry.worldScale=Ce.set(e[0],e[1],e[2]).length(),this._geometry.update(),super.updateMatrixWorld(t)}};import*as Me from"three";var N=class extends Me.Object3D{constructor(t){super(),this.shape=t}};import*as c from"three";import*as xe from"three";var Pe=new xe.Matrix4;function le(a){return a.invert?a.invert():a.getInverse(Pe.copy(a)),a}import*as be from"three";var pe=class{constructor(t){this._inverseCache=new be.Matrix4;this._shouldUpdateInverse=!0;this.matrix=t;let e={set:(r,i,o)=>(this._shouldUpdateInverse=!0,r[i]=o,!0)};this._originalElements=t.elements,t.elements=new Proxy(t.elements,e)}get inverse(){return this._shouldUpdateInverse&&(le(this._inverseCache.copy(this.matrix)),this._shouldUpdateInverse=!1),this._inverseCache}revert(){this.matrix.elements=this._originalElements}};var Ie=new c.Matrix4,v=new c.Vector3,te=new c.Vector3,Oe=new c.Vector3,z=new c.Vector3,ye=new c.Vector3,re=new c.Vector3,He=new c.Quaternion,Z=new c.Matrix4,Ae=new c.Matrix4,ce=class{constructor(t,e,r={},i=[]){this._currentTail=new c.Vector3;this._prevTail=new c.Vector3;this._boneAxis=new c.Vector3;this._worldSpaceBoneLength=0;this._center=null;this._initialLocalMatrix=new c.Matrix4;this._initialLocalRotation=new c.Quaternion;this._initialLocalChildPosition=new c.Vector3;var o,n,l,s,d,g;this.bone=t,this.bone.matrixAutoUpdate=!1,this.child=e,this.settings={hitRadius:(o=r.hitRadius)!=null?o:0,stiffness:(n=r.stiffness)!=null?n:1,gravityPower:(l=r.gravityPower)!=null?l:0,gravityDir:(d=(s=r.gravityDir)==null?void 0:s.clone())!=null?d:new c.Vector3(0,-1,0),dragForce:(g=r.dragForce)!=null?g:.4},this.colliderGroups=i}get center(){return this._center}set center(t){var e;(e=this._center)!=null&&e.userData.inverseCacheProxy&&(this._center.userData.inverseCacheProxy.revert(),delete this._center.userData.inverseCacheProxy),this._center=t,this._center&&(this._center.userData.inverseCacheProxy||(this._center.userData.inverseCacheProxy=new pe(this._center.matrixWorld)))}get initialLocalChildPosition(){return this._initialLocalChildPosition}get _parentMatrixWorld(){return this.bone.parent?this.bone.parent.matrixWorld:Ie}setInitState(){this._initialLocalMatrix.copy(this.bone.matrix),this._initialLocalRotation.copy(this.bone.quaternion),this.child?this._initialLocalChildPosition.copy(this.child.position):this._initialLocalChildPosition.copy(this.bone.position).normalize().multiplyScalar(.07);let t=this._getMatrixWorldToCenter(Z);this.bone.localToWorld(this._currentTail.copy(this._initialLocalChildPosition)).applyMatrix4(t),this._prevTail.copy(this._currentTail),this._boneAxis.copy(this._initialLocalChildPosition).normalize()}reset(){this.bone.quaternion.copy(this._initialLocalRotation),this.bone.updateMatrix(),this.bone.matrixWorld.multiplyMatrices(this._parentMatrixWorld,this.bone.matrix);let t=this._getMatrixWorldToCenter(Z);this.bone.localToWorld(this._currentTail.copy(this._initialLocalChildPosition)).applyMatrix4(t),this._prevTail.copy(this._currentTail)}update(t){if(t<=0)return;this._calcWorldSpaceBoneLength(),z.setFromMatrixPosition(this.bone.matrixWorld);let e=this._getMatrixWorldToCenter(Z);ye.copy(z).applyMatrix4(e);let r=He.setFromRotationMatrix(e),i=Ae.copy(e).multiply(this._parentMatrixWorld),o=te.copy(this._boneAxis).applyMatrix4(this._initialLocalMatrix).applyMatrix4(i).sub(ye).normalize(),n=Oe.copy(this.settings.gravityDir).applyQuaternion(r).normalize(),l=this._getMatrixCenterToWorld(Z);re.copy(this._currentTail).add(v.copy(this._currentTail).sub(this._prevTail).multiplyScalar(1-this.settings.dragForce)).add(v.copy(o).multiplyScalar(this.settings.stiffness*t)).add(v.copy(n).multiplyScalar(this.settings.gravityPower*t)).applyMatrix4(l),re.sub(z).normalize().multiplyScalar(this._worldSpaceBoneLength).add(z),this._collision(re),e=this._getMatrixWorldToCenter(Z),this._prevTail.copy(this._currentTail),this._currentTail.copy(v.copy(re).applyMatrix4(e));let s=le(Z.copy(this._parentMatrixWorld).multiply(this._initialLocalMatrix)),d=He.setFromUnitVectors(this._boneAxis,v.copy(re).applyMatrix4(s).normalize());this.bone.quaternion.copy(this._initialLocalRotation).multiply(d),this.bone.updateMatrix(),this.bone.matrixWorld.multiplyMatrices(this._parentMatrixWorld,this.bone.matrix)}_collision(t){this.colliderGroups.forEach(e=>{e.colliders.forEach(r=>{let i=r.shape.calculateCollision(r.matrixWorld,t,this.settings.hitRadius,v);i<0&&(t.add(v.multiplyScalar(-i)),t.sub(z).normalize().multiplyScalar(this._worldSpaceBoneLength).add(z))})})}_calcWorldSpaceBoneLength(){v.setFromMatrixPosition(this.bone.matrixWorld),this.child?te.setFromMatrixPosition(this.child.matrixWorld):(te.copy(this._initialLocalChildPosition),te.applyMatrix4(this.bone.matrixWorld)),this._worldSpaceBoneLength=v.sub(te).length()}_getMatrixCenterToWorld(t){return this._center?t.copy(this._center.matrixWorld):t.identity(),t}_getMatrixWorldToCenter(t){return this._center?t.copy(this._center.userData.inverseCacheProxy.inverse):t.identity(),t}};import*as S from"three";function Ve(a,t){let e=[],r=a;for(;r!==null;)e.unshift(r),r=r.parent;e.forEach(i=>{t(i)})}function ue(a,t){a.children.forEach(e=>{t(e)||ue(e,t)})}var ie=class{constructor(){this._joints=new Set;this._hasWarnedCircularDependency=!1;this._objectSpringBonesMap=new Map}get joints(){return this._joints}get springBones(){return console.warn("VRMSpringBoneManager: springBones is deprecated. use joints instead."),this._joints}get colliderGroups(){let t=new Set;return this._joints.forEach(e=>{e.colliderGroups.forEach(r=>{t.add(r)})}),Array.from(t)}get colliders(){let t=new Set;return this.colliderGroups.forEach(e=>{e.colliders.forEach(r=>{t.add(r)})}),Array.from(t)}addJoint(t){this._joints.add(t);let e=this._objectSpringBonesMap.get(t.bone);e==null&&(e=new Set,this._objectSpringBonesMap.set(t.bone,e)),e.add(t)}addSpringBone(t){console.warn("VRMSpringBoneManager: addSpringBone() is deprecated. use addJoint() instead."),this.addJoint(t)}deleteJoint(t){this._joints.delete(t),this._objectSpringBonesMap.get(t.bone).delete(t)}deleteSpringBone(t){console.warn("VRMSpringBoneManager: deleteSpringBone() is deprecated. use deleteJoint() instead."),this.deleteJoint(t)}setInitState(){let t=new Set,e=new Set,r=new Set;for(let i of this._joints)this._processSpringBone(i,t,e,r,o=>o.setInitState())}reset(){let t=new Set,e=new Set,r=new Set;for(let i of this._joints)this._processSpringBone(i,t,e,r,o=>o.reset())}update(t){let e=new Set,r=new Set,i=new Set;for(let o of this._joints)this._processSpringBone(o,e,r,i,n=>n.update(t)),ue(o.bone,n=>{var l,s;return((s=(l=this._objectSpringBonesMap.get(n))==null?void 0:l.size)!=null?s:0)>0?!0:(n.updateWorldMatrix(!1,!1),!1)})}_processSpringBone(t,e,r,i,o){if(r.has(t))return;if(e.has(t)){this._hasWarnedCircularDependency||(console.warn("VRMSpringBoneManager: Circular dependency detected while updating springbones"),this._hasWarnedCircularDependency=!0);return}e.add(t);let n=this._getDependencies(t);for(let l of n)Ve(l,s=>{let d=this._objectSpringBonesMap.get(s);if(d)for(let g of d)this._processSpringBone(g,e,r,i,o);else i.has(s)||(s.updateWorldMatrix(!1,!1),i.add(s))});t.bone.updateMatrix(),t.bone.updateWorldMatrix(!1,!1),o(t),i.add(t.bone),r.add(t)}_getDependencies(t){let e=new Set,r=t.bone.parent;return r&&e.add(r),t.colliderGroups.forEach(i=>{i.colliders.forEach(o=>{e.add(o)})}),e}};var ve="VRMC_springBone_extended_collider",De=new Set(["1.0","1.0-beta"]),Le=new Set(["1.0"]),O=class O{get name(){return O.EXTENSION_NAME}constructor(t,e){var r;this.parser=t,this.jointHelperRoot=e==null?void 0:e.jointHelperRoot,this.colliderHelperRoot=e==null?void 0:e.colliderHelperRoot,this.useExtendedColliders=(r=e==null?void 0:e.useExtendedColliders)!=null?r:!0}afterRoot(t){return Q(this,null,function*(){t.userData.vrmSpringBoneManager=yield this._import(t)})}_import(t){return Q(this,null,function*(){let e=yield this._v1Import(t);if(e!=null)return e;let r=yield this._v0Import(t);return r!=null?r:null})}_v1Import(t){return Q(this,null,function*(){var g,q,$,h,G;let e=t.parser.json;if(!(((g=e.extensionsUsed)==null?void 0:g.indexOf(O.EXTENSION_NAME))!==-1))return null;let i=new ie,o=yield t.parser.getDependencies("node"),n=(q=e.extensions)==null?void 0:q[O.EXTENSION_NAME];if(!n)return null;let l=n.specVersion;if(!De.has(l))return console.warn(`VRMSpringBoneLoaderPlugin: Unknown ${O.EXTENSION_NAME} specVersion "${l}"`),null;let s=($=n.colliders)==null?void 0:$.map((E,T)=>{var p,M,R,x,A,D,b,H,B,k,fe,Ee,_e,Re,me;let u=o[E.node],f=E.shape,_=(p=E.extensions)==null?void 0:p[ve];if(this.useExtendedColliders&&_!=null){let Se=_.specVersion;if(!Le.has(Se))console.warn(`VRMSpringBoneLoaderPlugin: Unknown ${ve} specVersion "${Se}". Fallbacking to the ${O.EXTENSION_NAME} definition`);else{let m=_.shape;if(m.sphere)return this._importSphereCollider(u,{offset:new S.Vector3().fromArray((M=m.sphere.offset)!=null?M:[0,0,0]),radius:(R=m.sphere.radius)!=null?R:0,inside:(x=m.sphere.inside)!=null?x:!1});if(m.capsule)return this._importCapsuleCollider(u,{offset:new S.Vector3().fromArray((A=m.capsule.offset)!=null?A:[0,0,0]),radius:(D=m.capsule.radius)!=null?D:0,tail:new S.Vector3().fromArray((b=m.capsule.tail)!=null?b:[0,0,0]),inside:(H=m.capsule.inside)!=null?H:!1});if(m.plane)return this._importPlaneCollider(u,{offset:new S.Vector3().fromArray((B=m.plane.offset)!=null?B:[0,0,0]),normal:new S.Vector3().fromArray((k=m.plane.normal)!=null?k:[0,0,1])})}}if(f.sphere)return this._importSphereCollider(u,{offset:new S.Vector3().fromArray((fe=f.sphere.offset)!=null?fe:[0,0,0]),radius:(Ee=f.sphere.radius)!=null?Ee:0,inside:!1});if(f.capsule)return this._importCapsuleCollider(u,{offset:new S.Vector3().fromArray((_e=f.capsule.offset)!=null?_e:[0,0,0]),radius:(Re=f.capsule.radius)!=null?Re:0,tail:new S.Vector3().fromArray((me=f.capsule.tail)!=null?me:[0,0,0]),inside:!1});throw new Error(`VRMSpringBoneLoaderPlugin: The collider #${T} has no valid shape`)}),d=(h=n.colliderGroups)==null?void 0:h.map((E,T)=>{var f;return{colliders:((f=E.colliders)!=null?f:[]).map(_=>{let p=s==null?void 0:s[_];if(p==null)throw new Error(`VRMSpringBoneLoaderPlugin: The colliderGroup #${T} attempted to use a collider #${_} but not found`);return p}),name:E.name}});return(G=n.springs)==null||G.forEach((E,T)=>{var M;let u=E.joints,f=(M=E.colliderGroups)==null?void 0:M.map(R=>{let x=d==null?void 0:d[R];if(x==null)throw new Error(`VRMSpringBoneLoaderPlugin: The spring #${T} attempted to use a colliderGroup ${R} but not found`);return x}),_=E.center!=null?o[E.center]:void 0,p;u.forEach(R=>{if(p){let x=p.node,A=o[x],D=R.node,b=o[D],H={hitRadius:p.hitRadius,dragForce:p.dragForce,gravityPower:p.gravityPower,stiffness:p.stiffness,gravityDir:p.gravityDir!=null?new S.Vector3().fromArray(p.gravityDir):void 0},B=this._importJoint(A,b,H,f);_&&(B.center=_),i.addJoint(B)}p=R})}),i.setInitState(),i})}_v0Import(t){return Q(this,null,function*(){var g,q,$;let e=t.parser.json;if(!(((g=e.extensionsUsed)==null?void 0:g.indexOf("VRM"))!==-1))return null;let i=(q=e.extensions)==null?void 0:q.VRM,o=i==null?void 0:i.secondaryAnimation;if(!o)return null;let n=o==null?void 0:o.boneGroups;if(!n)return null;let l=new ie,s=yield t.parser.getDependencies("node"),d=($=o.colliderGroups)==null?void 0:$.map(h=>{var T;let G=s[h.node];return{colliders:((T=h.colliders)!=null?T:[]).map((u,f)=>{var p,M,R;let _=new S.Vector3(0,0,0);return u.offset&&_.set((p=u.offset.x)!=null?p:0,(M=u.offset.y)!=null?M:0,u.offset.z?-u.offset.z:0),this._importSphereCollider(G,{offset:_,radius:(R=u.radius)!=null?R:0,inside:!1})})}});return n==null||n.forEach((h,G)=>{let E=h.bones;E&&E.forEach(T=>{var R,x,A,D;let u=s[T],f=new S.Vector3;h.gravityDir?f.set((R=h.gravityDir.x)!=null?R:0,(x=h.gravityDir.y)!=null?x:0,(A=h.gravityDir.z)!=null?A:0):f.set(0,-1,0);let _=h.center!=null?s[h.center]:void 0,p={hitRadius:h.hitRadius,dragForce:h.dragForce,gravityPower:h.gravityPower,stiffness:h.stiffiness,gravityDir:f},M=(D=h.colliderGroups)==null?void 0:D.map(b=>{let H=d==null?void 0:d[b];if(H==null)throw new Error(`VRMSpringBoneLoaderPlugin: The spring #${G} attempted to use a colliderGroup ${b} but not found`);return H});u.traverse(b=>{var k;let H=(k=b.children[0])!=null?k:null,B=this._importJoint(b,H,p,M);_&&(B.center=_),l.addJoint(B)})})}),t.scene.updateMatrixWorld(),l.setInitState(),l})}_importJoint(t,e,r,i){let o=new ce(t,e,r,i);if(this.jointHelperRoot){let n=new ee(o);this.jointHelperRoot.add(n),n.renderOrder=this.jointHelperRoot.renderOrder}return o}_importSphereCollider(t,e){let r=new U(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}_importCapsuleCollider(t,e){let r=new X(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}_importPlaneCollider(t,e){let r=new Y(e),i=new N(r);if(t.add(i),this.colliderHelperRoot){let o=new J(i);this.colliderHelperRoot.add(o),o.renderOrder=this.colliderHelperRoot.renderOrder}return i}};O.EXTENSION_NAME="VRMC_springBone";var Be=O;export{N as VRMSpringBoneCollider,J as VRMSpringBoneColliderHelper,w as VRMSpringBoneColliderShape,X as VRMSpringBoneColliderShapeCapsule,Y as VRMSpringBoneColliderShapePlane,U as VRMSpringBoneColliderShapeSphere,ce as VRMSpringBoneJoint,ee as VRMSpringBoneJointHelper,Be as VRMSpringBoneLoaderPlugin,ie as VRMSpringBoneManager};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixiv/three-vrm-springbone",
3
- "version": "3.1.0",
3
+ "version": "3.1.2",
4
4
  "description": "Spring bone module for @pixiv/three-vrm",
5
5
  "license": "MIT",
6
6
  "author": "pixiv",
@@ -51,16 +51,16 @@
51
51
  ]
52
52
  },
53
53
  "dependencies": {
54
- "@pixiv/types-vrm-0.0": "3.1.0",
55
- "@pixiv/types-vrmc-springbone-1.0": "3.1.0",
56
- "@pixiv/types-vrmc-springbone-extended-collider-1.0": "3.1.0"
54
+ "@pixiv/types-vrm-0.0": "3.1.2",
55
+ "@pixiv/types-vrmc-springbone-1.0": "3.1.2",
56
+ "@pixiv/types-vrmc-springbone-extended-collider-1.0": "3.1.2"
57
57
  },
58
58
  "devDependencies": {
59
- "@types/three": "^0.167.0",
60
- "three": "^0.167.0"
59
+ "@types/three": "^0.169.0",
60
+ "three": "^0.169.0"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "three": ">=0.137"
64
64
  },
65
- "gitHead": "2e7ddda794c067440c420bada91f2b05f581c2f6"
65
+ "gitHead": "add5746f2391fbb6baa118a7211462fbc0fad9d3"
66
66
  }
@@ -3,6 +3,7 @@ import type { VRMSpringBoneCollider } from './VRMSpringBoneCollider';
3
3
  import type { VRMSpringBoneColliderGroup } from './VRMSpringBoneColliderGroup';
4
4
  export declare class VRMSpringBoneManager {
5
5
  private _joints;
6
+ private _hasWarnedCircularDependency;
6
7
  get joints(): Set<VRMSpringBoneJoint>;
7
8
  /**
8
9
  * @deprecated Use {@link joints} instead.
@@ -28,7 +29,7 @@ export declare class VRMSpringBoneManager {
28
29
  * Update a spring bone.
29
30
  * If there are other spring bone that are dependant, it will try to update them recursively.
30
31
  * It updates matrixWorld of all ancestors and myself.
31
- * It might throw an error if there are circular dependencies.
32
+ * It might log an warning message if there are any circular dependencies.
32
33
  *
33
34
  * Intended to be used in {@link update} and {@link _processSpringBone} itself recursively.
34
35
  *