@splinetool/viewer 0.0.14 → 0.0.15
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/build/spline-viewer.cjs
CHANGED
|
@@ -4915,7 +4915,7 @@ gl_FragColor = vec4(resultColor, vColor.r);
|
|
|
4915
4915
|
<path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4916
4916
|
</svg>
|
|
4917
4917
|
`),P.addEventListener("pointerdown",()=>{f.forEach(O=>{O[0].movementState.jump=1}),r()}),P.addEventListener("touchend",O=>O.preventDefault()),this.joysticks[v]=[void 0,y];return}let C={zone:y,mode:"static",position:A,size:b};w==="hide"&&(C.restOpacity=0);let T=c8.create(C);T.on("move",(P,R)=>{f.forEach(O=>{let U=O[0];O[1]==="pos"?R.force<.2?U.moveForce=0:(U.movementState.movePosZ=Math.sin(-R.angle.radian),U.movementState.movePosX=Math.cos(-R.angle.radian),R.force<.3?U.moveForce=(R.force-.2)/.1:U.moveForce=1):R.force<.2?U.rotForce=0:(U.movementState.rotPosX=R.vector.y,U.movementState.rotPosY=-R.vector.x,R.force<.3?U.rotForce=(R.force-.2)/.1:U.rotForce=1)}),r()}),T.on("end",(P,R)=>{f.forEach(O=>{let U=O[0];O[1]==="pos"?(U.movementState.movePosZ=0,U.movementState.movePosX=0,U.moveForce=1):(U.movementState.rotPosX=0,U.movementState.rotPosY=0,U.rotForce=1)})}),this.joysticks[v]=[T,y]}),this.usePhysics===!1&&this.needsCollisionDetection&&this.initBVH(),this.initializationCounter++,window.setTimeout(()=>this.collisionEvents.forEach(f=>f.disabled=!1),80)}attachVRControllers(e){e.forEach(t=>{t.addEventListener("connected",i=>{"gamepad"in i.data&&"axes"in i.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(i.data.gamepad)})})}initBVH(){let e=[];if(this.scene.traverseObject(t=>{let i;if(t instanceof Vu)return;t instanceof Xn?i=t.object:i=t;let r=i.dataPatched;if(!r.visible)return!0;let s=t.geometry;if(cb(r)||ub(r)||i.dataPatched.events.some(n=>n.data.disabled!==!0&&n.data.type==="GameControl")){t.updateMatrixWorldSVD();let n=[];if(s?.getAttribute("position")!==void 0&&n.push(Ha(s,t.shearScale)),t.traverseObject(this.gatherChildrenGeom(t,n)),t.children.forEach(a=>a.updateMatrixWorld(!0)),n.length>0){let a=to(n,!1);t.boundsTree=new ai(a),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(t)}return!0}else s&&e.push(Ha(s,t.matrixWorld))}),e.length>0){let t=to(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new ai(t)}}addCollider(e,t,i,r,s,n=!0){if(r?.getAttribute("position").count===0||r?.getIndex()?.count===0)return;let a;s!==void 0?s.collider.type==="sphere"?a=Ot.ColliderDesc.ball(s.collider.radius/this.pixelsPerMeter):s.collider.type==="capsule"?a=Ot.ColliderDesc.capsule((s.collider.height/2-s.collider.radius)/this.pixelsPerMeter,s.collider.radius/this.pixelsPerMeter):a=Ot.ColliderDesc.cuboid(s.collider.width/this.pixelsPerMeter/2,s.collider.height/this.pixelsPerMeter/2,s.collider.depth/this.pixelsPerMeter/2):r&&(i.colliderType==="trimesh"?a=Ot.ColliderDesc.trimesh(r.getAttribute("position").array,r.getIndex().array):a=Ot.ColliderDesc.convexMesh(r.getAttribute("position").array,n?r.getIndex().array:void 0)),a.setFrictionCombineRule(Ot.CoefficientCombineRule.Average).setRestitutionCombineRule(Ot.CoefficientCombineRule.Average).setDensity(i.density).setFriction(i.friction).setRestitution(i.restitution);let o=this.sharedGameControlGlobals.rapierWorld.createCollider(a,t);if(this.sharedGameControlGlobals.colliderToEntity[o.handle]=e,s!==void 0){bi.fromArray(s.collider.position).multiply(In.setFromMatrixScale(e.matrixWorld)).divideScalar(this.pixelsPerMeter),o.setTranslationWrtParent(bi);let l=new nt().setFromEuler(new di().setFromVector3(new M().fromArray(s.collider.rotation)));o.setRotationWrtParent(l),o.setActiveEvents(Ot.ActiveEvents.COLLISION_EVENTS)}else this.sharedGameControlGlobals.eventsPerObjects[e.uuid]?.some(l=>l.target==="scene")&&o.setActiveEvents(Ot.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{if(r===0)return;r===1?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(e.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let s=i.geometry;s?.getAttribute("position")!==void 0&&t.push(Ha(s,i.matrixWorld))}}initPhysics(e){this.sharedGameControlGlobals.rapierWorld=new Ot.World(new Ot.Vector3(0,e??-10,0)),this.events=new Ot.EventQueue(!0);let t=[];if(this.scene.traverseObject(a=>{let o;if(a instanceof Vu)if(a.objectForSample){if(a.objectForSample.dataPatched.physics.fusedBody)return;o=a.object}else return a.object.dataPatched.physics.fusedBody===!0&&a.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else a instanceof Xn?o=a.object:o=a;let l=o.dataPatched;if(!l.physics||!l.visible)return!0;a.updateMatrixWorldSVD();let h=cb(l),d=ub(l),c,u=!1;for(let m of l.events)if(m.data.disabled!==!0){if(m.data.type==="GameControl")c=m.data;else if(m.data.type==="Collision"){u=!0;let g=new $j(m.data,o,this.scene,this.sharedAssets);this.collisionEvents.push(g),this.sharedGameControlGlobals.eventsPerObjects[o.uuid]?this.sharedGameControlGlobals.eventsPerObjects[o.uuid].push(g):this.sharedGameControlGlobals.eventsPerObjects[o.uuid]=[g]}}l.physics.rigidBody==="dynamic"&&l.physics.fusedBody===!1&&(a.matrixWorldFusedFalse=a.matrixWorld.clone());let p=a.geometry;if(l.physics.rigidBody==="dynamic"||h||d||u||c!==void 0){let m=[];if(p?.getAttribute("position")!==void 0&&m.push(Ha(p,a.shearScale)),l.physics.fusedBody){let g=this.gatherChildrenGeom(a,m);a.traverseObject(g),a.children.forEach(v=>v.updateMatrixWorld(!0));let f=a.cloner;f&&f.objectForSample===void 0&&l.physics.rigidBody==="dynamic"&&(f.traverseObject(g),f.children.forEach(v=>v.updateMatrixWorld(!0)))}if(m.length>0||c!==void 0){let g;c!==void 0?g=Ot.RigidBodyDesc.kinematicPositionBased():l.physics.rigidBody==="dynamic"?(g=Ot.RigidBodyDesc.dynamic(),g.setLinearDamping(l.physics.damping).setAdditionalMass(1e-9).setGravityScale(l.physics.gravityScale).enabledRotations(...l.physics.enabledRotation).enabledTranslations(...l.physics.enabledTranslation)):h||d?(g=Ot.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(a)):g=Ot.RigidBodyDesc.fixed();let f;f=m.length>0?to(m):void 0,(a.hasNonUniformScale?a.matrixWorldRigid:a.matrixWorld).decompose(bi,qs,In),a.position0=bi.clone().divideScalar(this.pixelsPerMeter),a.rotation0=qs.clone(),bi.divideScalar(this.pixelsPerMeter),g.setTranslation(bi.x,bi.y,bi.z).setRotation(qs),p?f?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):f?.scale(In.x/this.pixelsPerMeter,In.y/this.pixelsPerMeter,In.z/this.pixelsPerMeter);let v=this.sharedGameControlGlobals.rapierWorld.createRigidBody(g);c===void 0&&l.physics.rigidBody==="dynamic"&&this.rigidBodyToMesh.set(v.handle,[a,In.clone(),l.physics.fusedBody]),a.rigidBody=v;let y=!(l.geometry===void 0||l.geometry.type==="SubdivGeometry"||l.geometry.type==="NonParametricGeometry"||l.geometry.type==="BooleanGeometry"||l.geometry.type==="VectorGeometry"||l.geometry.type==="StarGeometry"||l.geometry.type==="RectangleGeometry"||l.geometry.type==="EllipseGeometry"||l.geometry.type==="TriangleGeometry"||l.geometry.type==="TorusGeometry"||l.geometry.type==="HelixGeometry");try{this.addCollider(o,v,l.physics,f,c,y)}catch{try{this.addCollider(o,v,l.physics,f,c,!1)}catch(b){console.error(b)}}}}else p&&t.push(Ha(p,a.matrixWorld)),l.physics.fusedBody&&a.traverse(m=>{!m.geometry||m===a||t.push(Ha(m.geometry,m.matrixWorld))});if(l.physics?.fusedBody===!0||c)return!0}),t.length===0)return;let i=to(t);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=Ot.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),n=Ot.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(Ot.CoefficientCombineRule.Multiply).setRestitutionCombineRule(Ot.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);this.sharedGameControlGlobals.rapierWorld.createCollider(n,s)}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}dispose(){if(this.scene.traverse(e=>{let t=e;t.matrixWorldFusedFalse&&(t.matrixWorldFusedFalse=void 0),t.rigidBody&&(t.rigidBody=void 0),t.position0&&(t.position0=void 0),t.rotation0&&(t.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.staticMeshBVH=void 0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.gameControls.forEach(e=>{e.reset(),e.dispose()}),this.gameControls=[],this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls){let e=this.orbitControls.object;e.removeEventListener("beginState",this.onBeginState),e.removeEventListener("completeState",this.onCompleteState),this.orbitControls.dispose(),this.orbitControls=void 0}for(let e of Object.values(this.sharedGameControlGlobals.eventsPerObjects))e.forEach(t=>t.disconnect());this.sharedGameControlGlobals.eventsPerObjects={},this.scene.updateMatrixWorld(!0)}update(e,t,i){let r=!0;if(this.orbitControls!==void 0&&this.orbitControlsNeedsUpdate&&(r=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2)this.initializationCounter++,r=!1;else if(this.initializationCounter===2)for(let s of this.gameControls)r=!s.update(e,t,i)&&r;if(this.usePhysics){for(let s of this.sharedGameControlGlobals.entitiesWithTransformAnim){(s.hasNonUniformScale?s.matrixWorldRigid:s.matrixWorld).decompose(bi,qs,In),of.setFromQuaternion(qs);let n=s;n.prevR===void 0?(n.prevR=of.clone(),n.prevT=bi.clone()):(n.prevR.copy(of),n.prevT.copy(bi)),s.rigidBody.setNextKinematicTranslation(bi.divideScalar(this.pixelsPerMeter)),s.rigidBody.setNextKinematicRotation(qs)}this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),r=!this.updatePositions()&&r}return r}dispatchCollisionEvent(e,t){t.dispatchEvent(MA),e.dispatch()}},lf={type:"change"},rH={type:"lock"},sH={type:"unlock"},$V=new M,db=new M,pb=new M,nH=new M,wi=new M,Ui=new M,Qs=new M,hf=new Se,fb=new Se,aH=new Se,e9=new Se,_r=new nt,ws=new nt,Gr=new di(0,0,0,"YXZ"),oH=new M(1,0,0),Sr=new M(0,1,0),lH=new M(0,0,1),mb=new M(1,1,1),hH=1,cH=.025,uH=16e-6,dH=12,pH=20,li=new cr,tr=new Gt,fH={type:"requestRender"},gb=Math.PI/6,zm=class extends Ni{constructor(e,t,i,r,s,n,a,o,l){super(),this.object=e,this.domElement=t,this.sharedGameControlGlobals=s,this.cameraFollow=n,this.camera=a,this.scene=o,this.sharedAssets=l,this.enableDamping=!0,this.position0=new M,this.rotation0=new di(0,0,0,"XYZ"),this.scale0=new M,this.hiddenMatrix0=new Se,this.target0=new M,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.euler0=new di(0,0,0,"YXZ"),this.position0Cam=new M,this.quat0Cam=new nt,this.scale0Cam=new M,this.hiddenMatrix0Cam=new Se,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new cr(new M(0,-40,0),new M(0,40,0)),matrix:new Se,position:new M,rotation:new nt},this.euler=new di(0,0,0,"YXZ"),this.eulerDelta=new M,this.lastPosition=new M,this.lastCameraQuaternion=new nt,this.lastCameraPosition=new M,this.PI_2=Math.PI/2,this.prevMouse=new H,this.velocityTarget=new M,this.velocity=new M,this.directionXZ=new M,this.rotVelocityStick=new M,this.rotVelocityTarget=new M,this.rotVelocity=new M,this.rotDirection=new M,this.nonColliderRotOffset=new Se,this.nonColliderPosOffset=new Se,this.firstPointerId=-1,this.rot=new M,this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new Se,this.objectToTarget=new M,this.objectToTarget0=new M,this.objectToCamXZ=new M,this.objectToCamXZ0=new M,this.targetToCamera=new M,this.targetToCamera0=new M,this.cameraPolarAxis0=new M,this.targetPos=new M,this.targetQuat=new nt,this.lerpFactorPos=new M().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new nt,this.objXZQuatInv=new nt,this.objXZRotMat=new Se,this.isFirstPerson=!1,this.actions={},this.didHit=!1,this.groundVelocity=new M,this.pushedVelocity=new M,this.groundYRotation=0,this.objectRealQuat=new nt,this.colliderWorldQuat=new nt,this.groundNormal=new M,this.groundTilt=new nt,this.groundTiltInv=new nt,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.onPointerDown=m=>{m.target!==this.domElement||this.firstPointerId!==-1||(this.firstPointerId=m.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),this.rotBy!=="keys"&&!Si&&(!Lu||Iu>=15.5)&&this.domElement.requestPointerLock(),this.prevMouse.set(m.clientX,m.clientY))},this.onPointerUp=m=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),m.pointerType==="mouse"&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=m=>{if(m.pointerId!==this.firstPointerId)return;let g=m.clientX-this.prevMouse.x,f=m.clientY-this.prevMouse.y;this.prevMouse.set(m.clientX,m.clientY),m.pointerType==="mouse"&&this.rotBy!=="keys"&&(Lu&&Iu<15.5&&!Si?(this.eulerDelta.y=-g*this.mouseOrbitSensitivity,this.eulerDelta.x=-f*this.mouseOrbitSensitivity):(this.eulerDelta.y=-m.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-m.movementY*this.mouseOrbitSensitivity)),m.pointerType!=="mouse"&&this.rotByTouch==="drag"&&(this.eulerDelta.y=-g*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-f*this.mouseOrbitSensitivity*5),this.dispatchEvent(lf)},this.onPointerlockChange=m=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(rH),zm.isLocked=!0):(this.dispatchEvent(sH),zm.isLocked=!1)},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.onKeyDown=m=>{!(m.target instanceof HTMLInputElement)&&(m.code==="ArrowLeft"||m.code==="ArrowUp"||m.code==="ArrowRight"||m.code==="ArrowDown"||m.code==="Space")&&m.preventDefault();for(let g of this.keyAssignments)if(m.key.toUpperCase()===g[1]||m.key===g[1]){this.movementState[g[0]]=1;break}this.dispatchEvent(lf)},this.onKeyUp=m=>{for(let g of this.keyAssignments)if(m.key.toUpperCase()===g[1]||m.key===g[1]||m.code.slice(3,m.code.length).toUpperCase()===g[1]){this.movementState[g[0]]=0;break}},this.copyVRGamePadValues=(m,g)=>{for(let f=2;f<4;f++){let v=m.axes[f];g===0?f===2?this.movementState.movePosX=v:this.movementState.movePosZ=v:(m.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,f===2?(Math.abs(this.movementState.rotPosY)<.3&&Math.abs(v)>=.3&&(this.vrEulerYOffset+=v<0?1:-1),this.movementState.rotPosY=v):this.moveMode==="fly"&&(this.movementState.moveNegY=v))}},e===a&&(this.isFirstPerson=!0),this.position0.copy(this.object.position),this.rotation0.copy(this.object.rotation),this.scale0.copy(this.object.scale),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.object.position,this.object.quaternion,this.object.scale),this.object.rotation.reorder("YXZ"),this.euler0.copy(this.object.rotation);let h=this.object.rotation.y;if(this.objectRealQuat.copy(this.object.quaternion),this.object.rotation.y=0,this.objXZQuat.copy(this.object.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.object.quaternion),this.object.rotation.set(0,h,0),this.rot.setFromEuler(this.object.rotation),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||this.cameraFollow===!0)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),this.cameraFollow===!0){if(this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera?.parent?.parent){let y=this.camera.matrix.clone().invert().premultiply(this.camera.matrixWorld),b=y.clone().invert();this.camera.hiddenMatrix.multiply(b),this.camera.matrix.premultiply(y),this.camera.matrixWorld.decompose(this.camera.position,this.camera.quaternion,this.camera.scale)}this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let m=new M(0,0,-1).applyQuaternion(this.camera.quaternion),g=new M().subVectors(this.object.position,this.camera.position);this.objectToCamXZ.copy(g),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ);let f;if(Math.abs(m.y)<1e-6){g.y=0,m.y=0;let y=g.projectOnVector(m);this.targetToCamera0.copy(y).negate(),f=this.camera.position.clone().add(y)}else{let y=m.multiplyScalar(g.y/m.y);this.targetToCamera0.copy(y).negate(),f=y.clone().add(this.camera.position)}this.objectToTarget0.subVectors(f,this.object.position);let v=new di().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-v.x,v.x=0,v.z=0,v.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(v)}if(this.object instanceof Os&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.object.quaternion,"YXZ"),this.connect(),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*hH,this.speedOrbit=(i.speedRotate??100)*cH,this.mouseOrbitSensitivity=(i.speedRotate??100)*uH,this.keyAssignments=i.keyAssignments.map(m=>{let g=[m[0],m[1]];return g[1]==="\u25B2"?g[1]="ArrowUp":g[1]==="\u25C0"?g[1]="ArrowLeft":g[1]==="\u25BC"?g[1]="ArrowDown":g[1]==="\u25B6"?g[1]="ArrowRight":g[1]==="\u21E7"?g[1]="Shift":g[1]==="\u21B5"?g[1]="Enter":g[1]==="Space"?g[1]=" ":g[1]==="\u2318"?g[1]="Meta":g[1]==="Ctrl"?g[1]="Control":g[1]==="Esc"&&(g[1]="Escape"),g}),i.rotBy==="mouse"){let m;m=this.keyAssignments.findIndex(g=>g[0]==="rotNegX"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotPosX"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotPosY"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotNegY"),m!==-1&&(this.keyAssignments[m][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(r.gravity??ji.defaultData.gravity)*dH,this.pixelsPerMeter=r.pixelsPerMeter??ji.defaultData.pixelsPerMeter,this.usePhysics=r.usePhysics??ji.defaultData.usePhysics,this.jumpPower=i.jumpPower*pH,this.resetYPosition=i.resetYPosition,this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??hm.defaultDataThirdPerson.orientWith;let d=r.skinWidthRelative??ji.defaultData.skinWidthRelative,c=r.stepThreshRelative??ji.defaultData.stepThreshRelative;this.slopeThresh=(r.slopeThresh??ji.defaultData.slopeThresh)*Math.PI/180,i.collider.type==="capsule"?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=i.collider.height*d/this.pixelsPerMeter,this.stepThresh=i.collider.height*c/this.pixelsPerMeter):i.collider.type==="sphere"?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*d/this.pixelsPerMeter,this.stepThresh=2*i.collider.radius*c/this.pixelsPerMeter):(this.offset=i.collider.height*d/this.pixelsPerMeter,this.stepThresh=i.collider.height*c/this.pixelsPerMeter),this.collider.type=i.collider.type;let u=new M().fromArray(i.collider.position),p=new nt().setFromEuler(new di().fromArray([...i.collider.rotation,"XYZ"]));this.collider.position.copy(u).multiply(this.object.scale),this.collider.rotation.copy(p),this.collider.matrix.compose(u,p,mb),i.cameraXAxis!==void 0&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),i.gameActions!==void 0&&Object.entries(i.gameActions).forEach(([m,g],f)=>{g.forEach(({id:v,data:y})=>{try{this.actions[m]===void 0&&(this.actions[m]=[]),y.type==="Transition"?this.actions[m].push(new oo(y,o,l)):y.type==="Audio"?this.actions[m].push(new ao(v,y,e,l)):y.type==="Video"&&this.actions[m].push(new Yu(v,y,e))}catch{}})}),this.dispatchStopEvent("move"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle")}reset(e=!1){if(this.object.rotation.copy(this.rotation0),this.object.position.copy(this.position0),this.object.scale.copy(this.scale0),this.object.hiddenMatrix.copy(this.hiddenMatrix0),e===!0){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.object.position,this.object.quaternion,this.object.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.rotation.reorder("YXZ");let t=this.object.rotation.y;this.object.rotation.y=0,this.objXZQuat.copy(this.object.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.object.quaternion),this.object.rotation.set(0,t,0),this.rot.setFromEuler(this.object.rotation),this.euler.setFromQuaternion(this.object.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}e===!1&&(this.object instanceof Os?this.object.matrixAutoUpdate=!0:this.object.updateMatrix()),this.cameraFollow===!0&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.dispatchEvent(lf)}connect(){this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError)}dispose(){this.disconnect(),Object.values(this.actions).forEach(e=>{e.forEach(t=>{(t instanceof oo||t instanceof ao||t instanceof Yu)&&t.dispose()})})}resetTo(e,t,i){}dispatchStartEvent(e){this.actions[e]!==void 0&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].forEach(t=>{t instanceof oo?t.play():t instanceof ao&&t.dispatchGameControl("start")})))}dispatchStopEvent(e){this.actions[e]!==void 0&&(!this.actionState[e]||(this.actionState[e]=!1,this.actions[e].forEach(t=>{t instanceof oo?t.stop():t instanceof ao&&t.dispatchGameControl("stop")}),this.object.traverseEntity(t=>{t.currentState!==null&&t.changeSelectedState(null,{scene:this.scene,shared:this.sharedAssets})})))}update(e,t,i){if(this.gravity<0?this.object.position.y<this.resetYPosition:this.object.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let s=r*60,n=!1;if(this.usePhysics&&this.collisionEnabled){let o=Ui.set(0,(this.velocity.y===0?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/10,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),l=this.sharedGameControlGlobals.rapierWorld.castShape(wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,o,this.object.rigidBody?.collider(0).shape,1,8,void 0,void 0,this.object.rigidBody);if(l){this.onObject=!0,this.groundNormal.set(l.normal2.x,l.normal2.y,l.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(n=!0);let h=l.collider._parent;this.groundYRotation=0,this.groundVelocity.set(0,0,0);for(let d of this.sharedGameControlGlobals.entitiesWithTransformAnim)if(d.rigidBody===h){(d.hasNonUniformScale?d.matrixWorldRigid:d.matrixWorld).decompose(wi,ws,Ui),this.groundVelocity.subVectors(wi,d.prevT),this.object.getWorldPosition(Ui).add(this.collider.position).sub(d.position),this.groundYRotation=Gr.setFromQuaternion(ws).y-d.prevR.y,Qs.copy(Ui).applyAxisAngle(Sr,this.groundYRotation),this.groundVelocity.add(Qs.sub(Ui)).divideScalar(r);break}}else this.onObject=!1}this.moveMode==="walk"&&this.collisionEnabled&&(this.movementState.jump===1&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.velocityTarget.y+=this.onObject?0:this.gravity*s),this.moveMode==="fly"&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,this.directionXZ.normalize(),this.movementState.moveNegZ||this.movementState.movePosZ?this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce:this.velocityTarget.z=0,this.movementState.moveNegX||this.movementState.movePosX?this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce:this.velocityTarget.x=0,(this.moveMode==="walk"?this.velocityTarget.x+this.velocityTarget.z===0:this.velocityTarget.manhattanLength()===0)?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.moveMode==="walk"&&(this.lerpFactorPos.y=1),this.didHit===!1&&this.pushedVelocity.manhattanLength()===0||this.usePhysics===!1?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**s),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**s),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**s)):this.velocity.copy(this.velocityTarget),(this.moveMode==="walk"?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("move")));let a=nH.copy(this.velocity);if(this.orientMode!=="none"&&this.isFirstPerson===!1){let o=Ui.copy(a);o.y=0,a.set(0,a.y,o.length()*-1)}if(Gr.setFromVector3(this.rot),this.moveMode==="walk"&&(Gr.x=0),a.applyEuler(Gr),n&&(ws.setFromUnitVectors(Sr,this.groundNormal),a.applyQuaternion(ws)),i){let o=Gr.set(0,this.vrEulerYOffset*gb,0);i.applyEuler(o),a.x+=i.x,a.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(this.usePhysics===!0){let o=Ui;this.pushedVelocity.set(0,0,0);for(let l of this.sharedGameControlGlobals.entitiesWithTransformAnim){let h=Qs.setFromMatrixPosition(l.matrixWorld).sub(l.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),d=l.rigidBody.collider(0).castCollider(h,this.object.rigidBody.collider(0),wi.copy(a).divideScalar(this.pixelsPerMeter),r);if(h.multiplyScalar(this.pixelsPerMeter),d!==null){this.pushedVelocity.copy(h),o.copy(d.normal1).applyQuaternion(l.quaternion);break}}if(this.pushedVelocity.manhattanLength()!==0){let l=o.dot(a);l<0&&a.addScaledVector(o,-l),a.add(this.pushedVelocity)}else a.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),this.rotationMode==="normal"&&(this.movementState.rotPosX||this.movementState.rotNegX)||this.rotationMode==="steer"&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||this.moveMode==="walk")?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,this.rotationMode==="normal"&&(this.movementState.rotPosY||this.movementState.rotNegY)||this.rotationMode==="steer"&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),this.rotVelocityTarget.manhattanLength()===0?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**s):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**s),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,this.rotVelocityTarget.y===0&&this.directionXZ.manhattanLength()===0?this.rotationAccumWhenOrientWithCamera=0:(this.cameraFollow===!1||this.cameraYAxis==="Locked")&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),this.isFirstPerson===!1&&this.orientMode!=="none"&&this.directionXZ.manhattanLength()>0){let o=wi,l=Ui.copy(this.directionXZ);l.x*=-1,this.camera.getWorldDirection(o);let h=Qs.copy(Sr).multiplyScalar(o.dot(Sr));if(o.sub(h),this.orientWith==="camera"?this.rot.y=o.angleTo(l)*(o.cross(l).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera:this.rot.y=this.euler.y+Math.atan2(-this.directionXZ.z,this.directionXZ.x)-Math.PI/2,this.orientMode==="radial"){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(Sr,this.euler.y-this.euler0.y);let d=Ui.copy(this.objectToCamXZ).normalize(),c=Qs.copy(a).multiplyScalar(r);c.y=0;let u=c.sub(wi.copy(d).multiplyScalar(c.dot(d))).cross(d).y;this.euler.y-=Math.atan2(u,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,this.rotVelocityTarget.y!==0&&(this.cameraFollow===!1||this.cameraYAxis==="Locked")&&(this.euler.y=this.rot.y);if(this.cameraFollow===!0&&(this.moveMode==="walk"?this.cameraXAxis==="Limit"?this.euler.x=rt.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=rt.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):this.cameraXAxis==="Limit"&&(this.euler.x=rt.clamp(this.euler.x,-this.PI_2,this.PI_2))),this.moveMode==="fly"?this.rot.x=this.euler.x:this.isFirstPerson&&(t?(Gr.copy(t),Gr.y=0):(Gr.copy(this.euler),Gr.y=0),this.nonColliderRotOffset.makeRotationFromEuler(Gr)),t&&(this.moveMode==="walk"?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*gb),_r.setFromAxisAngle(oH,this.rot.x),ws.setFromAxisAngle(Sr,this.rot.y),ws.multiply(_r),_r.setFromAxisAngle(lH,this.rot.z),ws.multiply(_r),this.object.quaternion.copy(ws),this.objectRealQuat.multiplyQuaternions(this.object.quaternion,this.objXZQuat),this.objectRealQuat.multiply(this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled)if(this.usePhysics){let o=Ui.copy(a).multiplyScalar(r/this.pixelsPerMeter),l;this.didHit=!1;let h=new M;for(let d=0;d<5;d++){let c=o.length(),u=Qs.copy(o).normalize();if(l=this.sharedGameControlGlobals.rapierWorld.castShape(wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter).add(h),this.colliderWorldQuat,u,this.object.rigidBody?.collider(0).shape,c,8,void 0,void 0,this.object.rigidBody),l!==null){this.didHit=!0;let p=this.sharedGameControlGlobals.colliderToEntity[l.collider.handle];if(p!==this.lastHitObj&&d===0){this.lastHitObj=p;let v=this.sharedGameControlGlobals.eventsPerObjects[p?.uuid];if(v)for(let y of v)y.data.target==="character"&&(p.dispatchEvent(MA),y.dispatch())}let m=db.set(l.normal2.x,l.normal2.y,l.normal2.z).applyQuaternion(this.colliderWorldQuat),g=pb.copy(u).multiplyScalar(l.toi).dot(m),f=l.toi;if(f===0&&(this.object.position.y+=this.offset*this.pixelsPerMeter),g>this.offset&&(f=l.toi*(g-this.offset)/g,h.addScaledVector(u,f)),o.copy(u).multiplyScalar(c-f),Math.acos(-m.y)>this.slopeThresh){let v=wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter).add(h),y=Qs.copy(l.witness2).applyQuaternion(this.colliderWorldQuat);y.y=0;let b=v.add(y);b.y+=this.stepThresh;let x=this.sharedGameControlGlobals.rapierWorld.castShape(b,this.colliderWorldQuat,o,this.object.rigidBody?.collider(0).shape,1,8,void 0,void 0,this.object.rigidBody);x!==null&&x.toi===0&&(m.y=0,m.normalize())}o.addScaledVector(m,-o.dot(m))}else{d===0&&this.directionXZ.manhattanLength()!==0&&(this.lastHitObj=null),h.add(o);break}}this.object.position.addScaledVector(h,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(wi.copy(this.object.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(_r.copy(this.object.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let o=this.onObject?1:5,l=a.multiplyScalar(r/o);for(let h=0;h<o;h++)this.object.position.add(l),this.collisionAdjustment(r/o)}else this.object.position.addScaledVector(a,r);if(this.moveMode==="walk"&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.object.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.updateMatrix(),this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.object.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),this.cameraFollow===!0){this.updateFollowArms();let o=this.objectToTarget.add(this.object.position),l=this.targetToCamera.add(o);hf.lookAt(l,o,Sr).setPosition(l),hf.decompose(this.targetPos,this.targetQuat,wi),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**s),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**s),this.camera.updateMatrix(),this.camera.matrixWorldNeedsUpdate=!0,this.cameraYAxis==="Limit"&&this.orientMode==="cartesian"&&(this.euler.y=rt.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=rt.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.lastPosition.distanceToSquared(this.object.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(this.camera===void 0||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&(this.moveMode==="fly"||this.onObject===!0||this.collisionEnabled===!1)?!1:(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.object.position),this.object.dispatchEvent(fH),!0)}updateFollowArms(){this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let e=_r.setFromAxisAngle(Sr,this.cameraYAxis==="Limit"&&this.orientMode!=="radial"?rt.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);(this.cameraYAxis!=="Locked"||this.orientMode==="radial")&&this.objectToTarget.applyQuaternion(e);let t;this.cameraXAxis==="Limit"?t=rt.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):t=rt.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=wi.copy(this.cameraPolarAxis0);(this.cameraYAxis!=="Locked"||this.orientMode==="radial")&&i.applyQuaternion(e);let r=ws.setFromAxisAngle(i,t);this.cameraYAxis!=="Locked"&&this.targetToCamera.applyQuaternion(e),this.cameraXAxis!=="Locked"&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){Sr.angleTo(e)*180/Math.PI<15||Sr.angleTo(e)*180/Math.PI>85?_r.identity():_r.setFromUnitVectors(Sr,e),this.groundTilt.slerp(_r,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=pb.set(0,0,0);this.object.updateMatrix();let i=hf.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(wi,_r,Ui).compose(wi,_r,mb);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(s=>{if(s===this.object||s.isDescendantOf(this.object))return;tr.makeEmpty(),s.updateMatrixWorldSVD();let n=s.matrixWorldRigid,a=fb.copy(n).invert(),o=aH.copy(fb).multiply(i);li.copy(this.collider.segment),li.start.applyMatrix4(o),li.end.applyMatrix4(o);let l=db.copy(this.object.position).applyMatrix4(a);tr.expandByPoint(li.start),tr.expandByPoint(li.end),tr.min.addScalar(-this.collider.radius),tr.max.addScalar(this.collider.radius),s.boundsTree.shapecast({intersectsBounds:h=>h.intersectsBox(tr),intersectsTriangle:h=>{let d=wi,c=Ui,u=h.closestPointToSegment(li,d,c);if(u<this.collider.radius){let p=this.collider.radius-u,m=c.sub(d).normalize(),g=Qs.copy(l);g.addScaledVector(m,p);let f=g.applyMatrix4(n).sub(this.object.position);t.add(f),li.start.addScaledVector(m,p),li.end.addScaledVector(m,p)}}})}),tr.makeEmpty(),li.copy(this.collider.segment),li.start.applyMatrix4(i),li.end.applyMatrix4(i),tr.expandByPoint(li.start),tr.expandByPoint(li.end),tr.min.addScalar(-this.collider.radius),tr.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({intersectsBounds:s=>s.intersectsBox(tr),intersectsTriangle:s=>{let n=wi,a=Ui,o=s.closestPointToSegment(li,n,a);if(o<this.collider.radius){let l=this.collider.radius-o,h=a.sub(n).normalize();this.alignToGround&&this.groundTiltAdjustment(h),t.addScaledVector(h,l),li.start.addScaledVector(h,l),li.end.addScaledVector(h,l)}}}),this.onObject=t.y>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.object.position.add(t)}},EA=zm;EA.isLocked=!1;var cf={type:"change"},vb={type:"changeZoom"},mH={type:"changePan"},Sl={type:"start"},Al={type:"end",changed:!0},gH={type:"end",changed:!1},uf=new nt,yb=new H,vH=2*Math.PI,yH=1e-8,xH=.01,xb=2,df=.125,bb=2,Uc=1,kc=1,Ml=.1,wb=new M,jc=new H,CA=class extends Ni{constructor(e,t,i=!1){super(),this.object=e,this.domElement=t,this.isExport=i,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,Ji.DOLLY_ROTATE,Ji.PAN],this.offset=new M,this.eye=new M,this.lastPosition=new M,this.lastQuaternion=new nt,this.current=new H,this.overShoot=new H,this.overRatio=new H,this.spherical=new ny,this.sphericalDelta=new ny,this.panOffset=new M,this.panLeftV=new M,this.panUpV=new M,this.panV=new M,this.rotateStart=new H,this.rotateEnd=new H,this.rotateDelta=new H,this.panStart=new H,this.panEnd=new H,this.panDelta=new H,this.dollyStart=new H,this.dollyEnd=new H,this.dollyDelta=new H,this.rotationRangeFactor=new H,this.panRangeFactor=new H,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.update=()=>{let r=this.object.position;this.offset.copy(r).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&this.state===-1&&this.rotateLeft((this.autoRotateClockwise===!0?1:-1)*this.getAutoRotationAngle()),this.rotationLimitsMode!==0&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),this.rotationLimitsMode!==2&&(this.spherical.phi+=this.sphericalDelta.phi),(this.rotationLimitsMode!==1||this.autoRotate===!0)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),this.panLimitsMode!==0&&(this.target.applyQuaternion(uf.copy(this.object.quaternion).invert()),this.panOffset.applyQuaternion(uf),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(this.object.quaternion),this.panOffset.applyQuaternion(this.object.quaternion)),this.panLimitsMode===2&&(this.panOffset.y=0),this.panLimitsMode===1&&(this.panOffset.x=0),this.state===-1&&!this.gesture?(this.panOffset.multiplyScalar(1-df),this.target.add(this.panOffset)):(this.target.add(this.panOffset),this.panOffset.set(0,0,0)),this.offset.setFromSpherical(this.spherical),r.copy(this.target).add(this.offset);let s=this.spherical.phi%vH;return this.eye.copy(this.offset).normalize(),this.object.up.copy(_t.DefaultUp).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),s>0&&s>Math.PI||s<0&&s>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),this.state===-1||this.enableDamping===!0?(this.sphericalDelta.theta*=1-df,this.sphericalDelta.phi*=1-df):this.sphericalDelta.set(0,0,0),this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>xH||8*(1-this.lastQuaternion.dot(this.object.quaternion))>yH?(this.dispatchEvent(cf),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)},this.onPointerDown=r=>{this.enabled!==!1&&(r.pointerType==="touch"||r.pointerType==="pen"&&Si?this.onPointerDownTouch(r):this.onPointerDownMouse(r),this.state!==-1&&(this.isPointerDown=!0,this.dispatchEvent(Sl),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),r.stopPropagation(),r.pointerType==="touch"||r.pointerType==="pen"&&Si||this.domElement.setPointerCapture(r.pointerId)))},this.onPointerLeave=r=>{this.resetHoverEffectOnPointerLeave?(this.hoverRotatePanMode===1?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,wb.subVectors(this.position0,this.target0),this.spherical.setFromVector3(wb),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):this.hoverRotatePanMode===2&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=r},this.onPointerEnter=r=>{this.resetHoverEffectOnPointerLeave||this.pointerLeaveEvent===void 0?jc.set(r.clientX-this.domElement.clientWidth/2,r.clientY-this.domElement.clientHeight/2):jc.set(r.clientX-this.pointerLeaveEvent.clientX,r.clientY-this.pointerLeaveEvent.clientY),this.hoverRotatePanMode===1?(this.rotateDelta.copy(jc).multiplyScalar(Uc*Ml).rotateAround(yb,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(r.clientX,r.clientY)):this.hoverRotatePanMode===2&&(this.panDelta.copy(jc).multiplyScalar(kc*Ml),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(r.clientX,r.clientY)),this.update()},this.onPointerMove=r=>{this.enabled!==!1&&(r.pointerType==="touch"||r.pointerType==="pen"&&Si?this.onPointerMoveTouch(r):this.onPointerMoveMouse(r),r.stopPropagation())},this.onPointerUp=r=>{this.isPointerDown=!1,Ze.length===0&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),this.hasChange?this.dispatchEvent(Al):this.dispatchEvent(gH),this.state=-1,r&&(r.stopPropagation(),r.pointerType==="touch"||r.pointerType==="pen"&&Si||this.domElement.releasePointerCapture(r.pointerId))},this.onPointerDownMouse=r=>{let s;switch(this.useKeyEvents?s=this.mouseButtons[r.button]:s=this.mouseButtonsPlay[r.button],s){case 0:if(r.altKey===!0&&!r.shiftKey&&!pc(r)){if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}else if(this.key===" "){if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}break;case 4:if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2;break;case 3:if(pc(r)||r.shiftKey){if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}else{if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}break;case 5:if(pc(r)||r.shiftKey){if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}else{if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=r=>{switch(this.state){case 0:if(this.enableRotate===!1)return;this.handleMouseMoveRotate(r);break;case 1:if(this.enableZoom===!1)return;this.handleMouseMoveDolly(r);break;case 2:if(this.enablePan===!1)return;this.handleMouseMovePan(r);break}},this.onPointerDownTouch=r=>{switch(this.touches[Ze.length-1]){case Ji.ROTATE:if(this.enableRotate===!1){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case Ji.PAN:if(this.enablePan===!1){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case Ji.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchStartDollyPan(),this.state=5;break;case Ji.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=r=>{switch(this.state){case 3:if(this.enableRotate===!1)return;this.handleTouchMoveRotate(r),this.update();break;case 4:if(this.enablePan===!1)return;this.handleTouchMovePan(r),this.update();break;case 5:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchMoveDollyPan(r),this.update();break;case 6:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchMoveDollyRotate(r),this.update();break;default:this.state=-1}},this.dispatchEndDebounced=Kw(()=>this.dispatchEvent(Al),33),this.onMouseWheel=r=>{this.enabled===!1||this.enableZoom===!1&&this.enablePan===!1||(this.isExport===!1&&this.domElement.clientHeight===document.body.clientHeight&&this.domElement.clientWidth===document.body.clientWidth&&r.preventDefault(),this.dispatchEvent(Sl),this.handleMouseWheel(r),this.dispatchEndDebounced())},this.onGesture=r=>{if(this.enabled!==!1)if(r.preventDefault(),r.type==="gesturechange"){if(this.enableZoom===!1)return;this.dispatchEvent(Sl),r.scale>this.prevScale?this.dollyIn(this.getZoomScale()):r.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=r.scale,this.update()}else this.dispatchEvent(Al)},this.onContextMenu=r=>{this.enabled!==!1&&r.preventDefault()},this.onTouchEnd=r=>{r.preventDefault()},this.onKeyDown=r=>{this.enabled!==!1&&(this.key=r.key)},this.onKeyUp=()=>{this.enabled!==!1&&(this.key=void 0,this.state!==-1&&this.onPointerUp(Ze[0]))},this.onPointerHover=r=>{r.pointerType!=="mouse"||this.enabled===!1||this.state!==-1||this.hoverRotatePanMode===2&&this.isPanOverShoot||this.hoverRotatePanMode===1&&this.isRotateOverShoot||(this.isPointerDown=!0,this.hoverRotatePanMode===2?this.handleMouseMovePan(r,Ml):this.hoverRotatePanMode===1&&this.handleMouseMoveRotate(r,Ml))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset)}dispatchEvent(e){e.type==="start"?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.isUpVectorFlipped=this.isUpVectorFlipped0,this.object.updateProjectionMatrix(),this.dispatchEvent(cf),this.update(),this.state=-1,this.pointerLeaveEvent=void 0}resetTo(e,t,i,r=!1){this.target.copy(e),this.object.position.copy(t),this.object.zoom=i,this.object.isUpVectorFlipped=r,this.object.updateProjectionMatrix(),this.dispatchEvent(cf),this.update(),this.state=-1}fromJSON(e,t){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.useWindowEvents=t==="window",this.hoverRotatePanMode!==0&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),Ml=(e.hoverRotatePanStrength/100)**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,xb=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let i=this.object.getTarget().applyQuaternion(uf.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+i.y,this.maxV=e.panVerticalOffset.max+i.y,this.minH=-e.panHorizontalOffset.min+i.x,this.maxH=e.panHorizontalOffset.max+i.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=Zs(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=Zs(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=Zs(this.spherical.theta-e.rotationHorizontalOffset.min),this.maxTheta=Zs(this.spherical.theta+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,e.orbitTouches===1&&(this.touches[0]=Ji.ROTATE),e.panTouches===1&&(this.touches[0]=Ji.PAN),e.orbitTouches===2&&(this.touches[1]=Ji.DOLLY_ROTATE),e.panTouches===2&&(this.touches[1]=Ji.DOLLY_PAN),e.orbitTouches===3&&(this.touches[2]=Ji.ROTATE),e.panTouches===3&&(this.touches[2]=Ji.PAN),this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),am||(this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture)),this.domElement.addEventListener("touchend",this.onTouchEnd),this.hoverRotatePanMode!==0&&!this.useWindowEvents&&(this.domElement.addEventListener("pointerleave",this.onPointerLeave),this.domElement.addEventListener("pointerenter",this.onPointerEnter)),this.pointerLeaveEvent=void 0}dispose(){this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),am||(this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture)),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,s,n,a,o){this.overShoot.set(0,0);let l,h,d;e instanceof M?(l=e.x,h=e.y,this.current.set(this.target.x,this.target.y),d=!0):(l=e.theta,h=e.phi,this.current.set(Zs(this.spherical.theta),Zs(this.spherical.phi)),d=!1),i===0&&(this.current.x+=l,this.current.y+=h),(t===3||t===2)&&(!d&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<s&&this.current.x>0&&(this.overShoot.x=s-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<s&&(this.overShoot.x=s-this.current.x),r===s&&(l=0)),(t===3||t===1)&&(this.current.y>n?this.overShoot.y=n-this.current.y:this.current.y<a&&(this.overShoot.y=a-this.current.y),n===a&&(h=0)),d||(this.overShoot.x=Zs(this.overShoot.x),this.overShoot.y=Zs(this.overShoot.y)),i!==0?(this.overRatio.copy(this.overShoot).divide(o),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),i===1&&(this.overRatio.x=_b(Math.abs(this.overRatio.x)),this.overRatio.y=_b(Math.abs(this.overRatio.y))),this.isPointerDown||i===1?i===2&&(this.overRatio.x>.9||this.overRatio.y>.9)?this.isPointerDown=!1:(l*this.overShoot.x<0&&(l*=1-this.overRatio.x),h*this.overShoot.y<0&&(h*=1-this.overRatio.y)):i===2&&(!d&&(this.overRatio.x>.002||this.overRatio.y>.002)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(l=this.overShoot.x*.05,h=this.overShoot.y*.05,d?this.isPanOverShoot=!0:this.isRotateOverShoot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(l+=this.overShoot.x,h+=this.overShoot.y),e instanceof M?(e.x=l,e.y=h):(e.theta=l,e.phi=h)}setEnableDampingSpeed(e){this.enableDamping=e,Uc=e===!0?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*xb}getZoomScale(){return Math.pow(.95,bb)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let s=this.panV.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*s/i.clientHeight,this.object.matrix),this.panUp(2*t*s/i.clientHeight,this.object.matrix)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix));this.dispatchEvent(mH)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(vb)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(vb)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(Sl),this.dollyOut(e),this.dispatchEvent(Al)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(Sl),this.dollyIn(e),this.dispatchEvent(Al)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){Lu&&Iu<15.5&&!Si?(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)):this.rotateDelta.set(e.movementX,e.movementY),this.rotateDelta.multiplyScalar(Uc*t).rotateAround(yb,-this.object.angleOffsetFromUp);let i=this.domElement;this.rotateLeft(2*Math.PI*this.rotateDelta.x/i.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/i.clientHeight),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){Lu&&Iu<15.5&&!Si?(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)):this.panDelta.set(e.movementX,e.movementY),this.panDelta.multiplyScalar(kc*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(A5===!1&&pc(e)===!1&&bH(e)===!0){if(this.enablePan===!1)return;this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(kc),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30)}else{if(this.enableZoom===!1)return;e.deltaY===0?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(Ze.length===2){let e=.5*(Ze[0].pageX+Ze[1].pageX),t=.5*(Ze[0].pageY+Ze[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(Ze[0].pageX,Ze[0].pageY)}handleTouchStartPan(){if(Ze.length===2){let e=.5*(Ze[0].pageX+Ze[1].pageX),t=.5*(Ze[0].pageY+Ze[1].pageY);this.panStart.set(e,t)}else this.panStart.set(Ze[0].pageX,Ze[0].pageY)}handleTouchStartDolly(){let e=Ze[0].pageX-Ze[1].pageX,t=Ze[0].pageY-Ze[1].pageY,i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(Ze.length===2){let i=Mp(e),r=.5*(e.pageX+i.x),s=.5*(e.pageY+i.y);this.rotateEnd.set(r,s)}else{if(e.pointerId!==Ze[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(Uc);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(Ze.length===2){let t=Mp(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==Ze[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(kc),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=Mp(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,s),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,bb)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}};function Zs(e){let t=Math.PI*2;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function _b(e){return 1-Math.pow(1-e,4)}function bH(e){return e.wheelDeltaY===0||e.deltaY===0?pd&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120?!1:e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX:e.deltaMode===0:e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY:e.deltaMode===0}var pf=new WeakMap,wH=class extends tg{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let s=new Of(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,n=>{let a={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(n,a).then(t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};this.decodeGeometry(e,s).then(t)}decodeGeometry(e,t){for(let o in t.attributeTypes){let l=t.attributeTypes[o];l.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[o]=l.name)}let i=JSON.stringify(t);if(pf.has(e)){let o=pf.get(e);if(o.key===i)return o.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,s=this.workerNextTaskID++,n=e.byteLength,a=this._getWorker(s,n).then(o=>(r=o,new Promise((l,h)=>{r._callbacks[s]={resolve:l,reject:h},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(o=>this._createGeometry(o.geometry));return a.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),pf.set(e,{key:i,promise:a}),a}_createGeometry(e){let t=new ke;e.index&&t.setIndex(new qe(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],s=r.name,n=r.array,a=r.itemSize;t.setAttribute(s,new qe(n,a))}return t}_loadLibrary(e,t){let i=new Of(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((r,s)=>{i.load(e,r,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{let r=i[0];e||(this.decoderConfig.wasmBinary=i[1]);let s=_H.toString(),n=["/* draco decoder */",r,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
|
|
4918
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([n]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let r=new Worker(this.workerSourceURL);r._callbacks={},r._taskCosts={},r._taskLoad=0,r.postMessage({type:"init",decoderConfig:this.decoderConfig}),r.onmessage=function(s){let n=s.data;switch(n.type){case"decode":r._callbacks[n.id].resolve(n);break;case"error":r._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(r)}else this.workerPool.sort(function(r,s){return r._taskLoad>s._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}};function _H(){let e,t;onmessage=function(a){let o=a.data;switch(o.type){case"init":e=o.decoderConfig,t=new Promise(function(d){e.onModuleLoaded=function(c){d({draco:c})},DracoDecoderModule(e)});break;case"decode":let l=o.buffer,h=o.taskConfig;t.then(d=>{let c=d.draco,u=new c.Decoder,p=new c.DecoderBuffer;p.Init(new Int8Array(l),l.byteLength);try{let m=i(c,u,p,h),g=m.attributes.map(f=>f.array.buffer);m.index&&g.push(m.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:m},g)}catch(m){console.error(m),self.postMessage({type:"error",id:o.id,error:m.message})}finally{c.destroy(p),c.destroy(u)}});break}};function i(a,o,l,h){let d=h.attributeIDs,c=h.attributeTypes,u,p,m=o.GetEncodedGeometryType(l);if(m===a.TRIANGULAR_MESH)u=new a.Mesh,p=o.DecodeBufferToMesh(l,u);else if(m===a.POINT_CLOUD)u=new a.PointCloud,p=o.DecodeBufferToPointCloud(l,u);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!p.ok()||u.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+p.error_msg());let g={index:null,attributes:[]};for(let f in d){let v=self[c[f]],y,b;if(h.useUniqueIDs)b=d[f],y=o.GetAttributeByUniqueId(u,b);else{if(b=o.GetAttributeId(u,a[d[f]]),b===-1)continue;y=o.GetAttribute(u,b)}g.attributes.push(s(a,o,u,f,v,y))}return m===a.TRIANGULAR_MESH&&(g.index=r(a,o,u)),a.destroy(u),g}function r(a,o,l){let h=l.num_faces()*3,d=h*4,c=a._malloc(d);o.GetTrianglesUInt32Array(l,d,c);let u=new Uint32Array(a.HEAPF32.buffer,c,h).slice();return a._free(c),{array:u,itemSize:1}}function s(a,o,l,h,d,c){let u=c.num_components(),p=l.num_points()*u,m=p*d.BYTES_PER_ELEMENT,g=n(a,d),f=a._malloc(m);o.GetAttributeDataArrayForAllPoints(l,c,g,m,f);let v=new d(a.HEAPF32.buffer,f,p).slice();return a._free(f),{name:h,array:v,itemSize:u}}function n(a,o){switch(o){case Float32Array:return a.DT_FLOAT32;case Int8Array:return a.DT_INT8;case Int16Array:return a.DT_INT16;case Int32Array:return a.DT_INT32;case Uint8Array:return a.DT_UINT8;case Uint16Array:return a.DT_UINT16;case Uint32Array:return a.DT_UINT32}}}var un;function SH(){return un||(un=new wH,un.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),un.decoderPending}async function AH(e){if(un){let t={attributeIDs:un.defaultAttributeIDs,attributeTypes:un.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await un.decodeGeometry(new Int8Array(e).buffer,t)}catch(r){console.error(r)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([r,s])=>({name:r,itemSize:s.itemSize,array:s.array}))}}return null}async function MH(e,t){let[i,r]=a_(qf.deserialize(new Uint8Array(e)));tF(i);let s=[];i.scene.objects.traverse((n,a)=>{a.type==="Mesh"&&a.geometry.type==="NonParametricGeometry"&&a.geometry.data.draco!==void 0&&s.push(a)}),s.length&&await SH();for(let n of s){let a=await AH(fi(n.geometry.data.draco));if(a){a.index&&(n.geometry.data.index={array:a.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let o={};a.attributes.forEach(({name:l,array:h,itemSize:d})=>{o[l]={array:h,itemSize:d,type:"Float32Array",normalized:!1}}),n.geometry.data.attributes=o,n.geometry.data.draco=void 0}}return t&&t(i),r.result().data}var Sb=Object.keys(iA).filter(e=>isNaN(Number(e))),EH=class{constructor(e,t,i,r,s,n,a,o,l,h){this.preventScroll=s,this.hideCursor=n,this.requestRender=o,this.isEnable=!1,this.onResetRaycaster=()=>{this.eventContext.raycasterNeedsUpdate=!0},this.onTouchMovePreventScroll=d=>{(d.touches.length>1||this.preventScroll)&&d.preventDefault()},this.onMouseWheelPreventScroll=d=>{this.preventScroll&&d.preventDefault()},this.eventContext=new y8(e,t,i,a,r,h??!1),this.handlers={Spline:new Dj(this.eventContext),Conditional:new zj(this.eventContext),Start:new Jj(this.eventContext),Basic:new Lj(this.eventContext,l,this),MouseHover:new qj(this.eventContext),Scroll:new Zj(this.eventContext),Follow:new jj(this.eventContext),LookAt:new Xj(this.eventContext)}}activate(){let{scene:e,domElement:t,eventElement:i}=this.eventContext;this.hideCursor&&(t.style.cursor="none"),this.isEnable=!0,e.traverseEntity(r=>{r.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(r=>r.connect()),this.resize(),Sb.forEach(r=>{Object.values(this.handlers).some(s=>s.domEventsNeeded.has(r))&&(t.addEventListener(r,this.onResetRaycaster),i.addEventListener(r,this.onResetRaycaster))}),t.addEventListener("wheel",this.onMouseWheelPreventScroll),t.addEventListener("touchmove",this.onTouchMovePreventScroll)}deactivate(){let{scene:e,domElement:t}=this.eventContext;this.isEnable=!1,t.style.cursor="",Object.values(this.handlers).forEach(i=>i.disconnect()),e.traverseEntity(i=>{i.removeEventListener("requestRender",this.requestRender)}),Sb.forEach(i=>{t.removeEventListener(i,this.onResetRaycaster)}),t.removeEventListener("touchmove",this.onTouchMovePreventScroll),t.removeEventListener("wheel",this.onMouseWheelPreventScroll)}reset(){this.deactivate(),this.activate()}resize(){this.eventContext.updaterRect()}updateUseWindowEvents(e){console.log("EventManager.updateUseWindowEvents",e),this.eventContext.useWindowEvents=e,
|
|
4918
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([n]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let r=new Worker(this.workerSourceURL);r._callbacks={},r._taskCosts={},r._taskLoad=0,r.postMessage({type:"init",decoderConfig:this.decoderConfig}),r.onmessage=function(s){let n=s.data;switch(n.type){case"decode":r._callbacks[n.id].resolve(n);break;case"error":r._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(r)}else this.workerPool.sort(function(r,s){return r._taskLoad>s._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}};function _H(){let e,t;onmessage=function(a){let o=a.data;switch(o.type){case"init":e=o.decoderConfig,t=new Promise(function(d){e.onModuleLoaded=function(c){d({draco:c})},DracoDecoderModule(e)});break;case"decode":let l=o.buffer,h=o.taskConfig;t.then(d=>{let c=d.draco,u=new c.Decoder,p=new c.DecoderBuffer;p.Init(new Int8Array(l),l.byteLength);try{let m=i(c,u,p,h),g=m.attributes.map(f=>f.array.buffer);m.index&&g.push(m.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:m},g)}catch(m){console.error(m),self.postMessage({type:"error",id:o.id,error:m.message})}finally{c.destroy(p),c.destroy(u)}});break}};function i(a,o,l,h){let d=h.attributeIDs,c=h.attributeTypes,u,p,m=o.GetEncodedGeometryType(l);if(m===a.TRIANGULAR_MESH)u=new a.Mesh,p=o.DecodeBufferToMesh(l,u);else if(m===a.POINT_CLOUD)u=new a.PointCloud,p=o.DecodeBufferToPointCloud(l,u);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!p.ok()||u.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+p.error_msg());let g={index:null,attributes:[]};for(let f in d){let v=self[c[f]],y,b;if(h.useUniqueIDs)b=d[f],y=o.GetAttributeByUniqueId(u,b);else{if(b=o.GetAttributeId(u,a[d[f]]),b===-1)continue;y=o.GetAttribute(u,b)}g.attributes.push(s(a,o,u,f,v,y))}return m===a.TRIANGULAR_MESH&&(g.index=r(a,o,u)),a.destroy(u),g}function r(a,o,l){let h=l.num_faces()*3,d=h*4,c=a._malloc(d);o.GetTrianglesUInt32Array(l,d,c);let u=new Uint32Array(a.HEAPF32.buffer,c,h).slice();return a._free(c),{array:u,itemSize:1}}function s(a,o,l,h,d,c){let u=c.num_components(),p=l.num_points()*u,m=p*d.BYTES_PER_ELEMENT,g=n(a,d),f=a._malloc(m);o.GetAttributeDataArrayForAllPoints(l,c,g,m,f);let v=new d(a.HEAPF32.buffer,f,p).slice();return a._free(f),{name:h,array:v,itemSize:u}}function n(a,o){switch(o){case Float32Array:return a.DT_FLOAT32;case Int8Array:return a.DT_INT8;case Int16Array:return a.DT_INT16;case Int32Array:return a.DT_INT32;case Uint8Array:return a.DT_UINT8;case Uint16Array:return a.DT_UINT16;case Uint32Array:return a.DT_UINT32}}}var un;function SH(){return un||(un=new wH,un.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),un.decoderPending}async function AH(e){if(un){let t={attributeIDs:un.defaultAttributeIDs,attributeTypes:un.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await un.decodeGeometry(new Int8Array(e).buffer,t)}catch(r){console.error(r)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([r,s])=>({name:r,itemSize:s.itemSize,array:s.array}))}}return null}async function MH(e,t){let[i,r]=a_(qf.deserialize(new Uint8Array(e)));tF(i);let s=[];i.scene.objects.traverse((n,a)=>{a.type==="Mesh"&&a.geometry.type==="NonParametricGeometry"&&a.geometry.data.draco!==void 0&&s.push(a)}),s.length&&await SH();for(let n of s){let a=await AH(fi(n.geometry.data.draco));if(a){a.index&&(n.geometry.data.index={array:a.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let o={};a.attributes.forEach(({name:l,array:h,itemSize:d})=>{o[l]={array:h,itemSize:d,type:"Float32Array",normalized:!1}}),n.geometry.data.attributes=o,n.geometry.data.draco=void 0}}return t&&t(i),r.result().data}var Sb=Object.keys(iA).filter(e=>isNaN(Number(e))),EH=class{constructor(e,t,i,r,s,n,a,o,l,h){this.preventScroll=s,this.hideCursor=n,this.requestRender=o,this.isEnable=!1,this.onResetRaycaster=()=>{this.eventContext.raycasterNeedsUpdate=!0},this.onTouchMovePreventScroll=d=>{(d.touches.length>1||this.preventScroll)&&d.preventDefault()},this.onMouseWheelPreventScroll=d=>{this.preventScroll&&d.preventDefault()},this.eventContext=new y8(e,t,i,a,r,h??!1),this.handlers={Spline:new Dj(this.eventContext),Conditional:new zj(this.eventContext),Start:new Jj(this.eventContext),Basic:new Lj(this.eventContext,l,this),MouseHover:new qj(this.eventContext),Scroll:new Zj(this.eventContext),Follow:new jj(this.eventContext),LookAt:new Xj(this.eventContext)}}activate(){let{scene:e,domElement:t,eventElement:i}=this.eventContext;this.hideCursor&&(t.style.cursor="none"),this.isEnable=!0,e.traverseEntity(r=>{r.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(r=>r.connect()),this.resize(),Sb.forEach(r=>{Object.values(this.handlers).some(s=>s.domEventsNeeded.has(r))&&(t.addEventListener(r,this.onResetRaycaster),i.addEventListener(r,this.onResetRaycaster))}),t.addEventListener("wheel",this.onMouseWheelPreventScroll),t.addEventListener("touchmove",this.onTouchMovePreventScroll)}deactivate(){let{scene:e,domElement:t}=this.eventContext;this.isEnable=!1,t.style.cursor="",Object.values(this.handlers).forEach(i=>i.disconnect()),e.traverseEntity(i=>{i.removeEventListener("requestRender",this.requestRender)}),Sb.forEach(i=>{t.removeEventListener(i,this.onResetRaycaster)}),t.removeEventListener("touchmove",this.onTouchMovePreventScroll),t.removeEventListener("wheel",this.onMouseWheelPreventScroll)}reset(){this.deactivate(),this.activate()}resize(){this.eventContext.updaterRect()}updateUseWindowEvents(e){let t=this.isEnable;t&&this.deactivate(),console.log("EventManager.updateUseWindowEvents",{value:e,wasEnabled:t}),this.eventContext.useWindowEvents=e,t&&this.activate()}},CH=class{constructor(e,t,i,r,s){this._aspect=1,this._renderer=e,this._camera=t,this._frameSize=new H().copy(i),this._editorSize=new H().copy(r),this._aspect=t.aspect,this._fov=s??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){!this._renderer||this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewportForImageExport(){if(!this._renderer||!this._camera||this._camera.cameraType!=="PerspectiveCamera")return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.x,r=this._editorSize.y;this._aspect=e/t,this._camera.zoom*=Math.min(i/e,r/t),this._renderer.setViewport(0,0,e,t)}updateViewport(){if(!this._renderer||!this._camera||this._camera.cameraType!=="PerspectiveCamera")return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.x,r=this._editorSize.y,s=0,n=0,a=e,o=t;e<i&&(s=(i-e)*.5,s=-s,a=i),t<r&&(n=(r-t)*.5,n=-n,o=r),this._aspect=a/o,this._renderer.setViewport(s,n,a,o)}updateCamera(){if(this._camera)if(this._camera.cameraType==="PerspectiveCamera"){let e=this._frameSize.y,t=this._editorSize.y,i=this._fov;if(e>t){let r=TH(e,1080,2160,1,15)/100;i*=e/t,i*=1-r}this._camera.aspect=this._aspect,this._camera.fov=i,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y)}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t),this._camera.updateProjectionMatrix())}};function TH(e,t,i,r,s){return(e-t)/(i-t)*(s-r)+r}var TA={RED:0,GREEN:1,BLUE:2,ALPHA:3},Mh="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",PH=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
4919
4919
|
uniform mediump sampler2D inputBuffer;
|
|
4920
4920
|
#else
|
|
4921
4921
|
uniform lowp sampler2D inputBuffer;
|
package/build/spline-viewer.js
CHANGED
|
@@ -4915,7 +4915,7 @@ gl_FragColor = vec4(resultColor, vColor.r);
|
|
|
4915
4915
|
<path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4916
4916
|
</svg>
|
|
4917
4917
|
`),P.addEventListener("pointerdown",()=>{f.forEach(O=>{O[0].movementState.jump=1}),r()}),P.addEventListener("touchend",O=>O.preventDefault()),this.joysticks[v]=[void 0,y];return}let C={zone:y,mode:"static",position:A,size:b};w==="hide"&&(C.restOpacity=0);let T=i8.create(C);T.on("move",(P,R)=>{f.forEach(O=>{let U=O[0];O[1]==="pos"?R.force<.2?U.moveForce=0:(U.movementState.movePosZ=Math.sin(-R.angle.radian),U.movementState.movePosX=Math.cos(-R.angle.radian),R.force<.3?U.moveForce=(R.force-.2)/.1:U.moveForce=1):R.force<.2?U.rotForce=0:(U.movementState.rotPosX=R.vector.y,U.movementState.rotPosY=-R.vector.x,R.force<.3?U.rotForce=(R.force-.2)/.1:U.rotForce=1)}),r()}),T.on("end",(P,R)=>{f.forEach(O=>{let U=O[0];O[1]==="pos"?(U.movementState.movePosZ=0,U.movementState.movePosX=0,U.moveForce=1):(U.movementState.rotPosX=0,U.movementState.rotPosY=0,U.rotForce=1)})}),this.joysticks[v]=[T,y]}),this.usePhysics===!1&&this.needsCollisionDetection&&this.initBVH(),this.initializationCounter++,window.setTimeout(()=>this.collisionEvents.forEach(f=>f.disabled=!1),80)}attachVRControllers(e){e.forEach(t=>{t.addEventListener("connected",i=>{"gamepad"in i.data&&"axes"in i.data.gamepad&&this.sharedGameControlGlobals.gamePads.push(i.data.gamepad)})})}initBVH(){let e=[];if(this.scene.traverseObject(t=>{let i;if(t instanceof Hu)return;t instanceof Xn?i=t.object:i=t;let r=i.dataPatched;if(!r.visible)return!0;let s=t.geometry;if(ab(r)||ob(r)||i.dataPatched.events.some(n=>n.data.disabled!==!0&&n.data.type==="GameControl")){t.updateMatrixWorldSVD();let n=[];if(s?.getAttribute("position")!==void 0&&n.push(Ha(s,t.shearScale)),t.traverseObject(this.gatherChildrenGeom(t,n)),t.children.forEach(a=>a.updateMatrixWorld(!0)),n.length>0){let a=to(n,!1);t.boundsTree=new ai(a),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(t)}return!0}else s&&e.push(Ha(s,t.matrixWorld))}),e.length>0){let t=to(e,!1);this.sharedGameControlGlobals.staticMeshBVH=new ai(t)}}addCollider(e,t,i,r,s,n=!0){if(r?.getAttribute("position").count===0||r?.getIndex()?.count===0)return;let a;s!==void 0?s.collider.type==="sphere"?a=Ot.ColliderDesc.ball(s.collider.radius/this.pixelsPerMeter):s.collider.type==="capsule"?a=Ot.ColliderDesc.capsule((s.collider.height/2-s.collider.radius)/this.pixelsPerMeter,s.collider.radius/this.pixelsPerMeter):a=Ot.ColliderDesc.cuboid(s.collider.width/this.pixelsPerMeter/2,s.collider.height/this.pixelsPerMeter/2,s.collider.depth/this.pixelsPerMeter/2):r&&(i.colliderType==="trimesh"?a=Ot.ColliderDesc.trimesh(r.getAttribute("position").array,r.getIndex().array):a=Ot.ColliderDesc.convexMesh(r.getAttribute("position").array,n?r.getIndex().array:void 0)),a.setFrictionCombineRule(Ot.CoefficientCombineRule.Average).setRestitutionCombineRule(Ot.CoefficientCombineRule.Average).setDensity(i.density).setFriction(i.friction).setRestitution(i.restitution);let o=this.sharedGameControlGlobals.rapierWorld.createCollider(a,t);if(this.sharedGameControlGlobals.colliderToEntity[o.handle]=e,s!==void 0){bi.fromArray(s.collider.position).multiply(In.setFromMatrixScale(e.matrixWorld)).divideScalar(this.pixelsPerMeter),o.setTranslationWrtParent(bi);let l=new nt().setFromEuler(new di().setFromVector3(new M().fromArray(s.collider.rotation)));o.setRotationWrtParent(l),o.setActiveEvents(Ot.ActiveEvents.COLLISION_EVENTS)}else this.sharedGameControlGlobals.eventsPerObjects[e.uuid]?.some(l=>l.target==="scene")&&o.setActiveEvents(Ot.ActiveEvents.COLLISION_EVENTS)}gatherChildrenGeom(e,t){return(i,r)=>{if(r===0)return;r===1?e.hasNonUniformScale?i.matrixWorld.multiplyMatrices(e.shearScale,i.hiddenMatrix):i.matrixWorld.copy(e.hiddenMatrix):i.matrixWorld.multiplyMatrices(i.parent.matrixWorld,i.hiddenMatrix),i.matrixWorld.multiply(i.matrix);let s=i.geometry;s?.getAttribute("position")!==void 0&&t.push(Ha(s,i.matrixWorld))}}initPhysics(e){this.sharedGameControlGlobals.rapierWorld=new Ot.World(new Ot.Vector3(0,e??-10,0)),this.events=new Ot.EventQueue(!0);let t=[];if(this.scene.traverseObject(a=>{let o;if(a instanceof Hu)if(a.objectForSample){if(a.objectForSample.dataPatched.physics.fusedBody)return;o=a.object}else return a.object.dataPatched.physics.fusedBody===!0&&a.object.dataPatched.physics.rigidBody==="dynamic"?!0:void 0;else a instanceof Xn?o=a.object:o=a;let l=o.dataPatched;if(!l.physics||!l.visible)return!0;a.updateMatrixWorldSVD();let h=ab(l),d=ob(l),c,u=!1;for(let m of l.events)if(m.data.disabled!==!0){if(m.data.type==="GameControl")c=m.data;else if(m.data.type==="Collision"){u=!0;let g=new Wj(m.data,o,this.scene,this.sharedAssets);this.collisionEvents.push(g),this.sharedGameControlGlobals.eventsPerObjects[o.uuid]?this.sharedGameControlGlobals.eventsPerObjects[o.uuid].push(g):this.sharedGameControlGlobals.eventsPerObjects[o.uuid]=[g]}}l.physics.rigidBody==="dynamic"&&l.physics.fusedBody===!1&&(a.matrixWorldFusedFalse=a.matrixWorld.clone());let p=a.geometry;if(l.physics.rigidBody==="dynamic"||h||d||u||c!==void 0){let m=[];if(p?.getAttribute("position")!==void 0&&m.push(Ha(p,a.shearScale)),l.physics.fusedBody){let g=this.gatherChildrenGeom(a,m);a.traverseObject(g),a.children.forEach(v=>v.updateMatrixWorld(!0));let f=a.cloner;f&&f.objectForSample===void 0&&l.physics.rigidBody==="dynamic"&&(f.traverseObject(g),f.children.forEach(v=>v.updateMatrixWorld(!0)))}if(m.length>0||c!==void 0){let g;c!==void 0?g=Ot.RigidBodyDesc.kinematicPositionBased():l.physics.rigidBody==="dynamic"?(g=Ot.RigidBodyDesc.dynamic(),g.setLinearDamping(l.physics.damping).setAdditionalMass(1e-9).setGravityScale(l.physics.gravityScale).enabledRotations(...l.physics.enabledRotation).enabledTranslations(...l.physics.enabledTranslation)):h||d?(g=Ot.RigidBodyDesc.kinematicPositionBased(),this.sharedGameControlGlobals.entitiesWithTransformAnim.push(a)):g=Ot.RigidBodyDesc.fixed();let f;f=m.length>0?to(m):void 0,(a.hasNonUniformScale?a.matrixWorldRigid:a.matrixWorld).decompose(bi,qs,In),a.position0=bi.clone().divideScalar(this.pixelsPerMeter),a.rotation0=qs.clone(),bi.divideScalar(this.pixelsPerMeter),g.setTranslation(bi.x,bi.y,bi.z).setRotation(qs),p?f?.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter):f?.scale(In.x/this.pixelsPerMeter,In.y/this.pixelsPerMeter,In.z/this.pixelsPerMeter);let v=this.sharedGameControlGlobals.rapierWorld.createRigidBody(g);c===void 0&&l.physics.rigidBody==="dynamic"&&this.rigidBodyToMesh.set(v.handle,[a,In.clone(),l.physics.fusedBody]),a.rigidBody=v;let y=!(l.geometry===void 0||l.geometry.type==="SubdivGeometry"||l.geometry.type==="NonParametricGeometry"||l.geometry.type==="BooleanGeometry"||l.geometry.type==="VectorGeometry"||l.geometry.type==="StarGeometry"||l.geometry.type==="RectangleGeometry"||l.geometry.type==="EllipseGeometry"||l.geometry.type==="TriangleGeometry"||l.geometry.type==="TorusGeometry"||l.geometry.type==="HelixGeometry");try{this.addCollider(o,v,l.physics,f,c,y)}catch{try{this.addCollider(o,v,l.physics,f,c,!1)}catch(b){console.error(b)}}}}else p&&t.push(Ha(p,a.matrixWorld)),l.physics.fusedBody&&a.traverse(m=>{!m.geometry||m===a||t.push(Ha(m.geometry,m.matrixWorld))});if(l.physics?.fusedBody===!0||c)return!0}),t.length===0)return;let i=to(t);i.scale(1/this.pixelsPerMeter,1/this.pixelsPerMeter,1/this.pixelsPerMeter);let r=Ot.RigidBodyDesc.fixed(),s=this.sharedGameControlGlobals.rapierWorld.createRigidBody(r),n=Ot.ColliderDesc.trimesh(i.getAttribute("position").array,i.getIndex().array).setFrictionCombineRule(Ot.CoefficientCombineRule.Multiply).setRestitutionCombineRule(Ot.CoefficientCombineRule.Multiply).setFriction(1).setRestitution(1);this.sharedGameControlGlobals.rapierWorld.createCollider(n,s)}updatePositions(){return this.nActiveRigidBodies=0,this.sharedGameControlGlobals.rapierWorld.forEachRigidBody(this.processRigidBody),this.nActiveRigidBodies>0}dispose(){if(this.scene.traverse(e=>{let t=e;t.matrixWorldFusedFalse&&(t.matrixWorldFusedFalse=void 0),t.rigidBody&&(t.rigidBody=void 0),t.position0&&(t.position0=void 0),t.rotation0&&(t.rotation0=void 0)}),this.sharedGameControlGlobals.rapierWorld?.free(),this.sharedGameControlGlobals.staticMeshBVH=void 0,this.sharedGameControlGlobals.entitiesWithTransformAnim=[],this.gameControls.forEach(e=>{e.reset(),e.dispose()}),this.gameControls=[],this.joysticks.forEach(([e,t])=>{e?.destroy(),t.remove()}),this.joystickToGameControls=[],this.joysticks=[],this.orbitControls){let e=this.orbitControls.object;e.removeEventListener("beginState",this.onBeginState),e.removeEventListener("completeState",this.onCompleteState),this.orbitControls.dispose(),this.orbitControls=void 0}for(let e of Object.values(this.sharedGameControlGlobals.eventsPerObjects))e.forEach(t=>t.disconnect());this.sharedGameControlGlobals.eventsPerObjects={},this.scene.updateMatrixWorld(!0)}update(e,t,i){let r=!0;if(this.orbitControls!==void 0&&this.orbitControlsNeedsUpdate&&(r=!this.orbitControls.update()),this.initializationCounter>=0&&this.initializationCounter<2)this.initializationCounter++,r=!1;else if(this.initializationCounter===2)for(let s of this.gameControls)r=!s.update(e,t,i)&&r;if(this.usePhysics){for(let s of this.sharedGameControlGlobals.entitiesWithTransformAnim){(s.hasNonUniformScale?s.matrixWorldRigid:s.matrixWorld).decompose(bi,qs,In),nf.setFromQuaternion(qs);let n=s;n.prevR===void 0?(n.prevR=nf.clone(),n.prevT=bi.clone()):(n.prevR.copy(nf),n.prevT.copy(bi)),s.rigidBody.setNextKinematicTranslation(bi.divideScalar(this.pixelsPerMeter)),s.rigidBody.setNextKinematicRotation(qs)}this.sharedGameControlGlobals.rapierWorld.step(this.events),this.events?.drainCollisionEvents(this.handleCollisionEvents),r=!this.updatePositions()&&r}return r}dispatchCollisionEvent(e,t){t.dispatchEvent(wA),e.dispatch()}},af={type:"change"},Qj={type:"lock"},Zj={type:"unlock"},VV=new M,lb=new M,hb=new M,Kj=new M,wi=new M,Ui=new M,Qs=new M,of=new Se,cb=new Se,Jj=new Se,WV=new Se,_r=new nt,ws=new nt,Gr=new di(0,0,0,"YXZ"),$j=new M(1,0,0),Sr=new M(0,1,0),eH=new M(0,0,1),ub=new M(1,1,1),tH=1,iH=.025,rH=16e-6,sH=12,nH=20,li=new hr,er=new Gt,aH={type:"requestRender"},db=Math.PI/6,Rm=class extends Ni{constructor(e,t,i,r,s,n,a,o,l){super(),this.object=e,this.domElement=t,this.sharedGameControlGlobals=s,this.cameraFollow=n,this.camera=a,this.scene=o,this.sharedAssets=l,this.enableDamping=!0,this.position0=new M,this.rotation0=new di(0,0,0,"XYZ"),this.scale0=new M,this.hiddenMatrix0=new Se,this.target0=new M,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.euler0=new di(0,0,0,"YXZ"),this.position0Cam=new M,this.quat0Cam=new nt,this.scale0Cam=new M,this.hiddenMatrix0Cam=new Se,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new hr(new M(0,-40,0),new M(0,40,0)),matrix:new Se,position:new M,rotation:new nt},this.euler=new di(0,0,0,"YXZ"),this.eulerDelta=new M,this.lastPosition=new M,this.lastCameraQuaternion=new nt,this.lastCameraPosition=new M,this.PI_2=Math.PI/2,this.prevMouse=new H,this.velocityTarget=new M,this.velocity=new M,this.directionXZ=new M,this.rotVelocityStick=new M,this.rotVelocityTarget=new M,this.rotVelocity=new M,this.rotDirection=new M,this.nonColliderRotOffset=new Se,this.nonColliderPosOffset=new Se,this.firstPointerId=-1,this.rot=new M,this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0},this.vrEulerYOffset=0,this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatrix=new Se,this.objectToTarget=new M,this.objectToTarget0=new M,this.objectToCamXZ=new M,this.objectToCamXZ0=new M,this.targetToCamera=new M,this.targetToCamera0=new M,this.cameraPolarAxis0=new M,this.targetPos=new M,this.targetQuat=new nt,this.lerpFactorPos=new M().setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new nt,this.objXZQuatInv=new nt,this.objXZRotMat=new Se,this.isFirstPerson=!1,this.actions={},this.didHit=!1,this.groundVelocity=new M,this.pushedVelocity=new M,this.groundYRotation=0,this.objectRealQuat=new nt,this.colliderWorldQuat=new nt,this.groundNormal=new M,this.groundTilt=new nt,this.groundTiltInv=new nt,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.onPointerDown=m=>{m.target!==this.domElement||this.firstPointerId!==-1||(this.firstPointerId=m.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),this.rotBy!=="keys"&&!Si&&(!Du||Ou>=15.5)&&this.domElement.requestPointerLock(),this.prevMouse.set(m.clientX,m.clientY))},this.onPointerUp=m=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),m.pointerType==="mouse"&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=m=>{if(m.pointerId!==this.firstPointerId)return;let g=m.clientX-this.prevMouse.x,f=m.clientY-this.prevMouse.y;this.prevMouse.set(m.clientX,m.clientY),m.pointerType==="mouse"&&this.rotBy!=="keys"&&(Du&&Ou<15.5&&!Si?(this.eulerDelta.y=-g*this.mouseOrbitSensitivity,this.eulerDelta.x=-f*this.mouseOrbitSensitivity):(this.eulerDelta.y=-m.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-m.movementY*this.mouseOrbitSensitivity)),m.pointerType!=="mouse"&&this.rotByTouch==="drag"&&(this.eulerDelta.y=-g*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-f*this.mouseOrbitSensitivity*5),this.dispatchEvent(af)},this.onPointerlockChange=m=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(Qj),Rm.isLocked=!0):(this.dispatchEvent(Zj),Rm.isLocked=!1)},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.onKeyDown=m=>{!(m.target instanceof HTMLInputElement)&&(m.code==="ArrowLeft"||m.code==="ArrowUp"||m.code==="ArrowRight"||m.code==="ArrowDown"||m.code==="Space")&&m.preventDefault();for(let g of this.keyAssignments)if(m.key.toUpperCase()===g[1]||m.key===g[1]){this.movementState[g[0]]=1;break}this.dispatchEvent(af)},this.onKeyUp=m=>{for(let g of this.keyAssignments)if(m.key.toUpperCase()===g[1]||m.key===g[1]||m.code.slice(3,m.code.length).toUpperCase()===g[1]){this.movementState[g[0]]=0;break}},this.copyVRGamePadValues=(m,g)=>{for(let f=2;f<4;f++){let v=m.axes[f];g===0?f===2?this.movementState.movePosX=v:this.movementState.movePosZ=v:(m.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,f===2?(Math.abs(this.movementState.rotPosY)<.3&&Math.abs(v)>=.3&&(this.vrEulerYOffset+=v<0?1:-1),this.movementState.rotPosY=v):this.moveMode==="fly"&&(this.movementState.moveNegY=v))}},e===a&&(this.isFirstPerson=!0),this.position0.copy(this.object.position),this.rotation0.copy(this.object.rotation),this.scale0.copy(this.object.scale),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.object.position,this.object.quaternion,this.object.scale),this.object.rotation.reorder("YXZ"),this.euler0.copy(this.object.rotation);let h=this.object.rotation.y;if(this.objectRealQuat.copy(this.object.quaternion),this.object.rotation.y=0,this.objXZQuat.copy(this.object.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.object.quaternion),this.object.rotation.set(0,h,0),this.rot.setFromEuler(this.object.rotation),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||this.cameraFollow===!0)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),this.cameraFollow===!0){if(this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera?.parent?.parent){let y=this.camera.matrix.clone().invert().premultiply(this.camera.matrixWorld),b=y.clone().invert();this.camera.hiddenMatrix.multiply(b),this.camera.matrix.premultiply(y),this.camera.matrixWorld.decompose(this.camera.position,this.camera.quaternion,this.camera.scale)}this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let m=new M(0,0,-1).applyQuaternion(this.camera.quaternion),g=new M().subVectors(this.object.position,this.camera.position);this.objectToCamXZ.copy(g),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ);let f;if(Math.abs(m.y)<1e-6){g.y=0,m.y=0;let y=g.projectOnVector(m);this.targetToCamera0.copy(y).negate(),f=this.camera.position.clone().add(y)}else{let y=m.multiplyScalar(g.y/m.y);this.targetToCamera0.copy(y).negate(),f=y.clone().add(this.camera.position)}this.objectToTarget0.subVectors(f,this.object.position);let v=new di().setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-v.x,v.x=0,v.z=0,v.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(v)}if(this.object instanceof Os&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.object.quaternion,"YXZ"),this.connect(),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=(i.speedTranslate??250)*tH,this.speedOrbit=(i.speedRotate??100)*iH,this.mouseOrbitSensitivity=(i.speedRotate??100)*rH,this.keyAssignments=i.keyAssignments.map(m=>{let g=[m[0],m[1]];return g[1]==="\u25B2"?g[1]="ArrowUp":g[1]==="\u25C0"?g[1]="ArrowLeft":g[1]==="\u25BC"?g[1]="ArrowDown":g[1]==="\u25B6"?g[1]="ArrowRight":g[1]==="\u21E7"?g[1]="Shift":g[1]==="\u21B5"?g[1]="Enter":g[1]==="Space"?g[1]=" ":g[1]==="\u2318"?g[1]="Meta":g[1]==="Ctrl"?g[1]="Control":g[1]==="Esc"&&(g[1]="Escape"),g}),i.rotBy==="mouse"){let m;m=this.keyAssignments.findIndex(g=>g[0]==="rotNegX"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotPosX"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotPosY"),m!==-1&&(this.keyAssignments[m][1]=""),m=this.keyAssignments.findIndex(g=>g[0]==="rotNegY"),m!==-1&&(this.keyAssignments[m][1]="")}this.lerpFactorPosStart=1-.02**(1/((i.delayPos[0]??.3)*60)),this.lerpFactorPosEnd=1-.02**(1/((i.delayPos[1]??.3)*60)),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/((i.delayRot[0]??.3)*60)),this.lerpFactorRotEnd=1-.02**(1/((i.delayRot[1]??.3)*60)),this.lerpFactorPosCamera=1-.02**(1/((i.delayPosCamera??.3)*60)),this.lerpFactorRotCamera=1-.02**(1/((i.delayRotCamera??.3)*60)),this.gravity=(r.gravity??ji.defaultData.gravity)*sH,this.pixelsPerMeter=r.pixelsPerMeter??ji.defaultData.pixelsPerMeter,this.usePhysics=r.usePhysics??ji.defaultData.usePhysics,this.jumpPower=i.jumpPower*nH,this.resetYPosition=i.resetYPosition,this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??om.defaultDataThirdPerson.orientWith;let d=r.skinWidthRelative??ji.defaultData.skinWidthRelative,c=r.stepThreshRelative??ji.defaultData.stepThreshRelative;this.slopeThresh=(r.slopeThresh??ji.defaultData.slopeThresh)*Math.PI/180,i.collider.type==="capsule"?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=i.collider.height*d/this.pixelsPerMeter,this.stepThresh=i.collider.height*c/this.pixelsPerMeter):i.collider.type==="sphere"?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radius*d/this.pixelsPerMeter,this.stepThresh=2*i.collider.radius*c/this.pixelsPerMeter):(this.offset=i.collider.height*d/this.pixelsPerMeter,this.stepThresh=i.collider.height*c/this.pixelsPerMeter),this.collider.type=i.collider.type;let u=new M().fromArray(i.collider.position),p=new nt().setFromEuler(new di().fromArray([...i.collider.rotation,"XYZ"]));this.collider.position.copy(u).multiply(this.object.scale),this.collider.rotation.copy(p),this.collider.matrix.compose(u,p,ub),i.cameraXAxis!==void 0&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),i.gameActions!==void 0&&Object.entries(i.gameActions).forEach(([m,g],f)=>{g.forEach(({id:v,data:y})=>{try{this.actions[m]===void 0&&(this.actions[m]=[]),y.type==="Transition"?this.actions[m].push(new oo(y,o,l)):y.type==="Audio"?this.actions[m].push(new ao(v,y,e,l)):y.type==="Video"&&this.actions[m].push(new Wu(v,y,e))}catch{}})}),this.dispatchStopEvent("move"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle")}reset(e=!1){if(this.object.rotation.copy(this.rotation0),this.object.position.copy(this.position0),this.object.scale.copy(this.scale0),this.object.hiddenMatrix.copy(this.hiddenMatrix0),e===!0){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.object.position,this.object.quaternion,this.object.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.rotation.reorder("YXZ");let t=this.object.rotation.y;this.object.rotation.y=0,this.objXZQuat.copy(this.object.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.object.quaternion),this.object.rotation.set(0,t,0),this.rot.setFromEuler(this.object.rotation),this.euler.setFromQuaternion(this.object.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}e===!1&&(this.object instanceof Os?this.object.matrixAutoUpdate=!0:this.object.updateMatrix()),this.cameraFollow===!0&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.dispatchEvent(af)}connect(){this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError)}dispose(){this.disconnect(),Object.values(this.actions).forEach(e=>{e.forEach(t=>{(t instanceof oo||t instanceof ao||t instanceof Wu)&&t.dispose()})})}resetTo(e,t,i){}dispatchStartEvent(e){this.actions[e]!==void 0&&(this.actionState[e]||(this.actionState[e]=!0,this.actions[e].forEach(t=>{t instanceof oo?t.play():t instanceof ao&&t.dispatchGameControl("start")})))}dispatchStopEvent(e){this.actions[e]!==void 0&&(!this.actionState[e]||(this.actionState[e]=!1,this.actions[e].forEach(t=>{t instanceof oo?t.stop():t instanceof ao&&t.dispatchGameControl("stop")}),this.object.traverseEntity(t=>{t.currentState!==null&&t.changeSelectedState(null,{scene:this.scene,shared:this.sharedAssets})})))}update(e,t,i){if(this.gravity<0?this.object.position.y<this.resetYPosition:this.object.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let r=(this.isFirstFrame?16.6:e)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let s=r*60,n=!1;if(this.usePhysics&&this.collisionEnabled){let o=Ui.set(0,(this.velocity.y===0?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/10,1)*(this.gravity>0?1:-1):this.velocity.y)*r,0).divideScalar(this.pixelsPerMeter),l=this.sharedGameControlGlobals.rapierWorld.castShape(wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,o,this.object.rigidBody?.collider(0).shape,1,8,void 0,void 0,this.object.rigidBody);if(l){this.onObject=!0,this.groundNormal.set(l.normal2.x,l.normal2.y,l.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(n=!0);let h=l.collider._parent;this.groundYRotation=0,this.groundVelocity.set(0,0,0);for(let d of this.sharedGameControlGlobals.entitiesWithTransformAnim)if(d.rigidBody===h){(d.hasNonUniformScale?d.matrixWorldRigid:d.matrixWorld).decompose(wi,ws,Ui),this.groundVelocity.subVectors(wi,d.prevT),this.object.getWorldPosition(Ui).add(this.collider.position).sub(d.position),this.groundYRotation=Gr.setFromQuaternion(ws).y-d.prevR.y,Qs.copy(Ui).applyAxisAngle(Sr,this.groundYRotation),this.groundVelocity.add(Qs.sub(Ui)).divideScalar(r);break}}else this.onObject=!1}this.moveMode==="walk"&&this.collisionEnabled&&(this.movementState.jump===1&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.velocityTarget.y+=this.onObject?0:this.gravity*s),this.moveMode==="fly"&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,this.directionXZ.normalize(),this.movementState.moveNegZ||this.movementState.movePosZ?this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce:this.velocityTarget.z=0,this.movementState.moveNegX||this.movementState.movePosX?this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce:this.velocityTarget.x=0,(this.moveMode==="walk"?this.velocityTarget.x+this.velocityTarget.z===0:this.velocityTarget.manhattanLength()===0)?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.moveMode==="walk"&&(this.lerpFactorPos.y=1),this.didHit===!1&&this.pushedVelocity.manhattanLength()===0||this.usePhysics===!1?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**s),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**s),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**s)):this.velocity.copy(this.velocityTarget),(this.moveMode==="walk"?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("move")));let a=Kj.copy(this.velocity);if(this.orientMode!=="none"&&this.isFirstPerson===!1){let o=Ui.copy(a);o.y=0,a.set(0,a.y,o.length()*-1)}if(Gr.setFromVector3(this.rot),this.moveMode==="walk"&&(Gr.x=0),a.applyEuler(Gr),n&&(ws.setFromUnitVectors(Sr,this.groundNormal),a.applyQuaternion(ws)),i){let o=Gr.set(0,this.vrEulerYOffset*db,0);i.applyEuler(o),a.x+=i.x,a.z+=i.z,this.nonColliderPosOffset.elements[13]+=i.y*r}if(this.usePhysics===!0){let o=Ui;this.pushedVelocity.set(0,0,0);for(let l of this.sharedGameControlGlobals.entitiesWithTransformAnim){let h=Qs.setFromMatrixPosition(l.matrixWorld).sub(l.prevT).divideScalar(r).divideScalar(this.pixelsPerMeter),d=l.rigidBody.collider(0).castCollider(h,this.object.rigidBody.collider(0),wi.copy(a).divideScalar(this.pixelsPerMeter),r);if(h.multiplyScalar(this.pixelsPerMeter),d!==null){this.pushedVelocity.copy(h),o.copy(d.normal1).applyQuaternion(l.quaternion);break}}if(this.pushedVelocity.manhattanLength()!==0){let l=o.dot(a);l<0&&a.addScaledVector(o,-l),a.add(this.pushedVelocity)}else a.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),this.rotationMode==="normal"&&(this.movementState.rotPosX||this.movementState.rotNegX)||this.rotationMode==="steer"&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||this.moveMode==="walk")?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,this.rotationMode==="normal"&&(this.movementState.rotPosY||this.movementState.rotNegY)||this.rotationMode==="steer"&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(r),this.rotVelocityStick),this.rotVelocityTarget.manhattanLength()===0?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**s):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**s),this.euler.x+=this.rotVelocity.x*r,this.euler.y+=this.rotVelocity.y*r+this.groundYRotation,this.rotVelocityTarget.y===0&&this.directionXZ.manhattanLength()===0?this.rotationAccumWhenOrientWithCamera=0:(this.cameraFollow===!1||this.cameraYAxis==="Locked")&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*r),this.isFirstPerson===!1&&this.orientMode!=="none"&&this.directionXZ.manhattanLength()>0){let o=wi,l=Ui.copy(this.directionXZ);l.x*=-1,this.camera.getWorldDirection(o);let h=Qs.copy(Sr).multiplyScalar(o.dot(Sr));if(o.sub(h),this.orientWith==="camera"?this.rot.y=o.angleTo(l)*(o.cross(l).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera:this.rot.y=this.euler.y+Math.atan2(-this.directionXZ.z,this.directionXZ.x)-Math.PI/2,this.orientMode==="radial"){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(Sr,this.euler.y-this.euler0.y);let d=Ui.copy(this.objectToCamXZ).normalize(),c=Qs.copy(a).multiplyScalar(r);c.y=0;let u=c.sub(wi.copy(d).multiplyScalar(c.dot(d))).cross(d).y;this.euler.y-=Math.atan2(u,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*r+this.groundYRotation,this.rotVelocityTarget.y!==0&&(this.cameraFollow===!1||this.cameraYAxis==="Locked")&&(this.euler.y=this.rot.y);if(this.cameraFollow===!0&&(this.moveMode==="walk"?this.cameraXAxis==="Limit"?this.euler.x=rt.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=rt.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):this.cameraXAxis==="Limit"&&(this.euler.x=rt.clamp(this.euler.x,-this.PI_2,this.PI_2))),this.moveMode==="fly"?this.rot.x=this.euler.x:this.isFirstPerson&&(t?(Gr.copy(t),Gr.y=0):(Gr.copy(this.euler),Gr.y=0),this.nonColliderRotOffset.makeRotationFromEuler(Gr)),t&&(this.moveMode==="walk"?(this.rot.y=t.y,this.rot.x=0,this.rot.z=0):this.rot.setFromEuler(t),this.rot.y+=this.vrEulerYOffset*db),_r.setFromAxisAngle($j,this.rot.x),ws.setFromAxisAngle(Sr,this.rot.y),ws.multiply(_r),_r.setFromAxisAngle(eH,this.rot.z),ws.multiply(_r),this.object.quaternion.copy(ws),this.objectRealQuat.multiplyQuaternions(this.object.quaternion,this.objXZQuat),this.objectRealQuat.multiply(this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled)if(this.usePhysics){let o=Ui.copy(a).multiplyScalar(r/this.pixelsPerMeter),l;this.didHit=!1;let h=new M;for(let d=0;d<5;d++){let c=o.length(),u=Qs.copy(o).normalize();if(l=this.sharedGameControlGlobals.rapierWorld.castShape(wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter).add(h),this.colliderWorldQuat,u,this.object.rigidBody?.collider(0).shape,c,8,void 0,void 0,this.object.rigidBody),l!==null){this.didHit=!0;let p=this.sharedGameControlGlobals.colliderToEntity[l.collider.handle];if(p!==this.lastHitObj&&d===0){this.lastHitObj=p;let v=this.sharedGameControlGlobals.eventsPerObjects[p?.uuid];if(v)for(let y of v)y.data.target==="character"&&(p.dispatchEvent(wA),y.dispatch())}let m=lb.set(l.normal2.x,l.normal2.y,l.normal2.z).applyQuaternion(this.colliderWorldQuat),g=hb.copy(u).multiplyScalar(l.toi).dot(m),f=l.toi;if(f===0&&(this.object.position.y+=this.offset*this.pixelsPerMeter),g>this.offset&&(f=l.toi*(g-this.offset)/g,h.addScaledVector(u,f)),o.copy(u).multiplyScalar(c-f),Math.acos(-m.y)>this.slopeThresh){let v=wi.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.object.position).divideScalar(this.pixelsPerMeter).add(h),y=Qs.copy(l.witness2).applyQuaternion(this.colliderWorldQuat);y.y=0;let b=v.add(y);b.y+=this.stepThresh;let x=this.sharedGameControlGlobals.rapierWorld.castShape(b,this.colliderWorldQuat,o,this.object.rigidBody?.collider(0).shape,1,8,void 0,void 0,this.object.rigidBody);x!==null&&x.toi===0&&(m.y=0,m.normalize())}o.addScaledVector(m,-o.dot(m))}else{d===0&&this.directionXZ.manhattanLength()!==0&&(this.lastHitObj=null),h.add(o);break}}this.object.position.addScaledVector(h,this.pixelsPerMeter),this.object.rigidBody?.setTranslation(wi.copy(this.object.position).divideScalar(this.pixelsPerMeter),!0),this.object.rigidBody?.setRotation(_r.copy(this.object.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat),!0)}else{let o=this.onObject?1:5,l=a.multiplyScalar(r/o);for(let h=0;h<o;h++)this.object.position.add(l),this.collisionAdjustment(r/o)}else this.object.position.addScaledVector(a,r);if(this.moveMode==="walk"&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.object.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.updateMatrix(),this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.object.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),this.cameraFollow===!0){this.updateFollowArms();let o=this.objectToTarget.add(this.object.position),l=this.targetToCamera.add(o);of.lookAt(l,o,Sr).setPosition(l),of.decompose(this.targetPos,this.targetQuat,wi),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**s),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**s),this.camera.updateMatrix(),this.camera.matrixWorldNeedsUpdate=!0,this.cameraYAxis==="Limit"&&this.orientMode==="cartesian"&&(this.euler.y=rt.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=rt.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.lastPosition.distanceToSquared(this.object.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(this.camera===void 0||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&(this.moveMode==="fly"||this.onObject===!0||this.collisionEnabled===!1)?!1:(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.object.position),this.object.dispatchEvent(aH),!0)}updateFollowArms(){this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let e=_r.setFromAxisAngle(Sr,this.cameraYAxis==="Limit"&&this.orientMode!=="radial"?rt.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);(this.cameraYAxis!=="Locked"||this.orientMode==="radial")&&this.objectToTarget.applyQuaternion(e);let t;this.cameraXAxis==="Limit"?t=rt.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):t=rt.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=wi.copy(this.cameraPolarAxis0);(this.cameraYAxis!=="Locked"||this.orientMode==="radial")&&i.applyQuaternion(e);let r=ws.setFromAxisAngle(i,t);this.cameraYAxis!=="Locked"&&this.targetToCamera.applyQuaternion(e),this.cameraXAxis!=="Locked"&&this.targetToCamera.applyQuaternion(r)}groundTiltAdjustment(e){Sr.angleTo(e)*180/Math.PI<15||Sr.angleTo(e)*180/Math.PI>85?_r.identity():_r.setFromUnitVectors(Sr,e),this.groundTilt.slerp(_r,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(e){let t=hb.set(0,0,0);this.object.updateMatrix();let i=of.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(wi,_r,Ui).compose(wi,_r,ub);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(s=>{if(s===this.object||s.isDescendantOf(this.object))return;er.makeEmpty(),s.updateMatrixWorldSVD();let n=s.matrixWorldRigid,a=cb.copy(n).invert(),o=Jj.copy(cb).multiply(i);li.copy(this.collider.segment),li.start.applyMatrix4(o),li.end.applyMatrix4(o);let l=lb.copy(this.object.position).applyMatrix4(a);er.expandByPoint(li.start),er.expandByPoint(li.end),er.min.addScalar(-this.collider.radius),er.max.addScalar(this.collider.radius),s.boundsTree.shapecast({intersectsBounds:h=>h.intersectsBox(er),intersectsTriangle:h=>{let d=wi,c=Ui,u=h.closestPointToSegment(li,d,c);if(u<this.collider.radius){let p=this.collider.radius-u,m=c.sub(d).normalize(),g=Qs.copy(l);g.addScaledVector(m,p);let f=g.applyMatrix4(n).sub(this.object.position);t.add(f),li.start.addScaledVector(m,p),li.end.addScaledVector(m,p)}}})}),er.makeEmpty(),li.copy(this.collider.segment),li.start.applyMatrix4(i),li.end.applyMatrix4(i),er.expandByPoint(li.start),er.expandByPoint(li.end),er.min.addScalar(-this.collider.radius),er.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({intersectsBounds:s=>s.intersectsBox(er),intersectsTriangle:s=>{let n=wi,a=Ui,o=s.closestPointToSegment(li,n,a);if(o<this.collider.radius){let l=this.collider.radius-o,h=a.sub(n).normalize();this.alignToGround&&this.groundTiltAdjustment(h),t.addScaledVector(h,l),li.start.addScaledVector(h,l),li.end.addScaledVector(h,l)}}}),this.onObject=t.y>Math.abs(e*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let r=Math.max(0,t.length()-1e-5);t.normalize().multiplyScalar(r),this.object.position.add(t)}},_A=Rm;_A.isLocked=!1;var lf={type:"change"},pb={type:"changeZoom"},oH={type:"changePan"},_l={type:"start"},Sl={type:"end",changed:!0},lH={type:"end",changed:!1},hf=new nt,fb=new H,hH=2*Math.PI,cH=1e-8,uH=.01,mb=2,cf=.125,gb=2,zc=1,Fc=1,Al=.1,vb=new M,Uc=new H,SA=class extends Ni{constructor(e,t,i=!1){super(),this.object=e,this.domElement=t,this.isExport=i,this.enabled=!0,this.useKeyEvents=!0,this.enableDamping=!1,this.enableZoom=!0,this.enableRotate=!0,this.enablePan=!0,this.autoRotate=!1,this.rotationLimitsMode=0,this.panLimitsMode=0,this.rotationSoftLimit=2,this.panSoftLimit=2,this.hoverRotatePanMode=0,this.zoomLimitsEnabled=!1,this.mouseButtons=[0,5],this.mouseButtonsPlay=[3,4,5],this.touches=[null,Ki.DOLLY_ROTATE,Ki.PAN],this.offset=new M,this.eye=new M,this.lastPosition=new M,this.lastQuaternion=new nt,this.current=new H,this.overShoot=new H,this.overRatio=new H,this.spherical=new ty,this.sphericalDelta=new ty,this.panOffset=new M,this.panLeftV=new M,this.panUpV=new M,this.panV=new M,this.rotateStart=new H,this.rotateEnd=new H,this.rotateDelta=new H,this.panStart=new H,this.panEnd=new H,this.panDelta=new H,this.dollyStart=new H,this.dollyEnd=new H,this.dollyDelta=new H,this.rotationRangeFactor=new H,this.panRangeFactor=new H,this.state=-1,this.zoomChanged=!1,this.isPointerDown=!1,this.isThetaFlipped=!1,this.prevScale=0,this.scale=1,this.gesture=!1,this.timer=-1,this.timerHover=-1,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPhi=0,this.maxPhi=Math.PI,this.minTheta=-1/0,this.maxTheta=1/0,this.minH=0,this.maxH=Math.PI,this.minV=-1/0,this.maxV=1/0,this.autoRotateClockwise=!0,this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.resetHoverEffectOnPointerLeave=!1,this.hasChange=!1,this.useWindowEvents=!1,this.update=()=>{let r=this.object.position;this.offset.copy(r).sub(this.target),this.spherical.setFromVector3(this.offset),this.object.isUpVectorFlipped&&(this.spherical.phi*=-1,this.spherical.theta-=Math.PI),this.autoRotate&&this.state===-1&&this.rotateLeft((this.autoRotateClockwise===!0?1:-1)*this.getAutoRotationAngle()),this.rotationLimitsMode!==0&&this.applyLimits(this.sphericalDelta,this.rotationLimitsMode,this.rotationSoftLimit,this.maxTheta,this.minTheta,this.maxPhi,this.minPhi,this.rotationRangeFactor),this.rotationLimitsMode!==2&&(this.spherical.phi+=this.sphericalDelta.phi),(this.rotationLimitsMode!==1||this.autoRotate===!0)&&(this.spherical.theta+=this.sphericalDelta.theta),this.spherical.radius*=this.scale,this.zoomLimitsEnabled&&(this.spherical.radius=Math.max(this.minDistance,Math.min(this.maxDistance,this.spherical.radius))),this.panLimitsMode!==0&&(this.target.applyQuaternion(hf.copy(this.object.quaternion).invert()),this.panOffset.applyQuaternion(hf),this.applyLimits(this.panOffset,this.panLimitsMode,this.panSoftLimit,this.maxH,this.minH,this.maxV,this.minV,this.panRangeFactor),this.target.applyQuaternion(this.object.quaternion),this.panOffset.applyQuaternion(this.object.quaternion)),this.panLimitsMode===2&&(this.panOffset.y=0),this.panLimitsMode===1&&(this.panOffset.x=0),this.state===-1&&!this.gesture?(this.panOffset.multiplyScalar(1-cf),this.target.add(this.panOffset)):(this.target.add(this.panOffset),this.panOffset.set(0,0,0)),this.offset.setFromSpherical(this.spherical),r.copy(this.target).add(this.offset);let s=this.spherical.phi%hH;return this.eye.copy(this.offset).normalize(),this.object.up.copy(_t.DefaultUp).applyAxisAngle(this.eye,this.object.angleOffsetFromUp),s>0&&s>Math.PI||s<0&&s>-Math.PI?(this.object.up.negate(),this.object.lookAt(this.target),this.object.isUpVectorFlipped=!0):(this.object.lookAt(this.target),this.object.isUpVectorFlipped=!1),this.state===-1||this.enableDamping===!0?(this.sphericalDelta.theta*=1-cf,this.sphericalDelta.phi*=1-cf):this.sphericalDelta.set(0,0,0),this.scale=1,this.zoomChanged||this.lastPosition.distanceToSquared(this.object.position)>uH||8*(1-this.lastQuaternion.dot(this.object.quaternion))>cH?(this.dispatchEvent(lf),this.lastPosition.copy(this.object.position),this.lastQuaternion.copy(this.object.quaternion),this.zoomChanged=!1,!0):(this.isPanOverShoot=!1,this.isRotateOverShoot=!1,this.sphericalDelta.set(0,0,0),this.panOffset.set(0,0,0),!1)},this.onPointerDown=r=>{this.enabled!==!1&&(r.pointerType==="touch"||r.pointerType==="pen"&&Si?this.onPointerDownTouch(r):this.onPointerDownMouse(r),this.state!==-1&&(this.isPointerDown=!0,this.dispatchEvent(_l),this.domElement.addEventListener("pointermove",this.onPointerMove),this.domElement.addEventListener("pointerup",this.onPointerUp),r.stopPropagation(),r.pointerType==="touch"||r.pointerType==="pen"&&Si||this.domElement.setPointerCapture(r.pointerId)))},this.onPointerLeave=r=>{this.resetHoverEffectOnPointerLeave?(this.hoverRotatePanMode===1?(this.sphericalDelta.theta=-this.spherical.theta,this.sphericalDelta.phi=-this.spherical.phi,vb.subVectors(this.position0,this.target0),this.spherical.setFromVector3(vb),this.sphericalDelta.theta+=this.spherical.theta,this.sphericalDelta.phi+=this.spherical.phi,this.sphericalDelta.theta/=8,this.sphericalDelta.phi/=8):this.hoverRotatePanMode===2&&this.panOffset.subVectors(this.target0,this.target).divideScalar(8),this.update()):this.pointerLeaveEvent=r},this.onPointerEnter=r=>{this.resetHoverEffectOnPointerLeave||this.pointerLeaveEvent===void 0?Uc.set(r.clientX-this.domElement.clientWidth/2,r.clientY-this.domElement.clientHeight/2):Uc.set(r.clientX-this.pointerLeaveEvent.clientX,r.clientY-this.pointerLeaveEvent.clientY),this.hoverRotatePanMode===1?(this.rotateDelta.copy(Uc).multiplyScalar(zc*Al).rotateAround(fb,-this.object.angleOffsetFromUp),this.rotateLeft(2*Math.PI*this.rotateDelta.x/this.domElement.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/this.domElement.clientHeight),this.rotateStart.set(r.clientX,r.clientY)):this.hoverRotatePanMode===2&&(this.panDelta.copy(Uc).multiplyScalar(Fc*Al),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.set(r.clientX,r.clientY)),this.update()},this.onPointerMove=r=>{this.enabled!==!1&&(r.pointerType==="touch"||r.pointerType==="pen"&&Si?this.onPointerMoveTouch(r):this.onPointerMoveMouse(r),r.stopPropagation())},this.onPointerUp=r=>{this.isPointerDown=!1,Ze.length===0&&(this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)),this.hasChange?this.dispatchEvent(Sl):this.dispatchEvent(lH),this.state=-1,r&&(r.stopPropagation(),r.pointerType==="touch"||r.pointerType==="pen"&&Si||this.domElement.releasePointerCapture(r.pointerId))},this.onPointerDownMouse=r=>{let s;switch(this.useKeyEvents?s=this.mouseButtons[r.button]:s=this.mouseButtonsPlay[r.button],s){case 0:if(r.altKey===!0&&!r.shiftKey&&!uc(r)){if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}else if(this.key===" "){if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}break;case 4:if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2;break;case 3:if(uc(r)||r.shiftKey){if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}else{if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}break;case 5:if(uc(r)||r.shiftKey){if(this.enableRotate===!1)return;this.handleMouseDownRotate(r),this.state=0}else{if(this.enablePan===!1)return;this.handleMouseDownPan(r),this.state=2}break;default:this.state=-1}},this.onPointerMoveMouse=r=>{switch(this.state){case 0:if(this.enableRotate===!1)return;this.handleMouseMoveRotate(r);break;case 1:if(this.enableZoom===!1)return;this.handleMouseMoveDolly(r);break;case 2:if(this.enablePan===!1)return;this.handleMouseMovePan(r);break}},this.onPointerDownTouch=r=>{switch(this.touches[Ze.length-1]){case Ki.ROTATE:if(this.enableRotate===!1){this.state=-1;return}this.handleTouchStartRotate(),this.state=3;break;case Ki.PAN:if(this.enablePan===!1){this.state=-1;return}this.handleTouchStartPan(),this.state=4;break;case Ki.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchStartDollyPan(),this.state=5;break;case Ki.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchStartDollyRotate(),this.state=6;break;default:this.state=-1}},this.onPointerMoveTouch=r=>{switch(this.state){case 3:if(this.enableRotate===!1)return;this.handleTouchMoveRotate(r),this.update();break;case 4:if(this.enablePan===!1)return;this.handleTouchMovePan(r),this.update();break;case 5:if(this.enableZoom===!1&&this.enablePan===!1)return;this.handleTouchMoveDollyPan(r),this.update();break;case 6:if(this.enableZoom===!1&&this.enableRotate===!1)return;this.handleTouchMoveDollyRotate(r),this.update();break;default:this.state=-1}},this.dispatchEndDebounced=Yw(()=>this.dispatchEvent(Sl),33),this.onMouseWheel=r=>{this.enabled===!1||this.enableZoom===!1&&this.enablePan===!1||(this.isExport===!1&&this.domElement.clientHeight===document.body.clientHeight&&this.domElement.clientWidth===document.body.clientWidth&&r.preventDefault(),this.dispatchEvent(_l),this.handleMouseWheel(r),this.dispatchEndDebounced())},this.onGesture=r=>{if(this.enabled!==!1)if(r.preventDefault(),r.type==="gesturechange"){if(this.enableZoom===!1)return;this.dispatchEvent(_l),r.scale>this.prevScale?this.dollyIn(this.getZoomScale()):r.scale<this.prevScale&&this.dollyOut(this.getZoomScale()),this.prevScale=r.scale,this.update()}else this.dispatchEvent(Sl)},this.onContextMenu=r=>{this.enabled!==!1&&r.preventDefault()},this.onTouchEnd=r=>{r.preventDefault()},this.onKeyDown=r=>{this.enabled!==!1&&(this.key=r.key)},this.onKeyUp=()=>{this.enabled!==!1&&(this.key=void 0,this.state!==-1&&this.onPointerUp(Ze[0]))},this.onPointerHover=r=>{r.pointerType!=="mouse"||this.enabled===!1||this.state!==-1||this.hoverRotatePanMode===2&&this.isPanOverShoot||this.hoverRotatePanMode===1&&this.isRotateOverShoot||(this.isPointerDown=!0,this.hoverRotatePanMode===2?this.handleMouseMovePan(r,Al):this.hoverRotatePanMode===1&&this.handleMouseMoveRotate(r,Al))},this.target=this.object.getTarget(),this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.isUpVectorFlipped0=this.object.isUpVectorFlipped,this.offset.copy(this.object.position).sub(this.target),this.spherical.setFromVector3(this.offset)}dispatchEvent(e){e.type==="start"?this.hasChange=!1:this.hasChange=!0,super.dispatchEvent(e)}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.isUpVectorFlipped=this.isUpVectorFlipped0,this.object.updateProjectionMatrix(),this.dispatchEvent(lf),this.update(),this.state=-1,this.pointerLeaveEvent=void 0}resetTo(e,t,i,r=!1){this.target.copy(e),this.object.position.copy(t),this.object.zoom=i,this.object.isUpVectorFlipped=r,this.object.updateProjectionMatrix(),this.dispatchEvent(lf),this.update(),this.state=-1}fromJSON(e,t){this.setEnableDampingSpeed(e.enableDamping),this.enablePan=e.enablePan,this.enableZoom=e.enableZoom,this.enableRotate=e.enableRotate,this.rotationLimitsMode=e.rotationLimitsMode,this.panLimitsMode=e.panLimitsMode,this.panSoftLimit=e.panSoftLimit,this.rotationSoftLimit=e.rotationSoftLimit,this.hoverRotatePanMode=e.hoverRotatePanMode,this.useWindowEvents=t==="window",this.hoverRotatePanMode!==0&&(this.useWindowEvents?window.addEventListener("pointermove",this.onPointerHover):this.domElement.addEventListener("pointermove",this.onPointerHover)),Al=(e.hoverRotatePanStrength/100)**2,this.zoomLimitsEnabled=e.zoomLimitsEnabled,this.minZoom=e.zoomLimits.min,this.maxZoom=Math.max(e.zoomLimits.min,e.zoomLimits.max),this.minDistance=1e3/e.zoomLimits.max,this.maxDistance=Math.max(this.minDistance,1e3/e.zoomLimits.min),this.autoRotate=e.autoRotate,mb=e.autoRotateSpeed,this.autoRotateClockwise=e.autoRotateClockwise;let i=this.object.getTarget().applyQuaternion(hf.copy(this.object.quaternion).invert());this.minV=-e.panVerticalOffset.min+i.y,this.maxV=e.panVerticalOffset.max+i.y,this.minH=-e.panHorizontalOffset.min+i.x,this.maxH=e.panHorizontalOffset.max+i.x,this.panRangeFactor.set(this.maxH-this.minH,this.maxV-this.minV).divideScalar(2),this.rotationRangeFactor.setScalar(Math.PI).divideScalar(4),this.minPhi=Zs(this.spherical.phi-e.rotationVerticalOffset.min),this.maxPhi=Zs(this.spherical.phi+e.rotationVerticalOffset.max),this.minTheta=Zs(this.spherical.theta-e.rotationHorizontalOffset.min),this.maxTheta=Zs(this.spherical.theta+e.rotationHorizontalOffset.max),this.isThetaFlipped=this.minTheta>this.maxTheta,e.orbitTouches===1&&(this.touches[0]=Ki.ROTATE),e.panTouches===1&&(this.touches[0]=Ki.PAN),e.orbitTouches===2&&(this.touches[1]=Ki.DOLLY_ROTATE),e.panTouches===2&&(this.touches[1]=Ki.DOLLY_PAN),e.orbitTouches===3&&(this.touches[2]=Ki.ROTATE),e.panTouches===3&&(this.touches[2]=Ki.PAN),this.resetHoverEffectOnPointerLeave=e.resetHoverEffectOnPointerLeave??!1}connect(){this.domElement.addEventListener("contextmenu",this.onContextMenu),this.domElement.addEventListener("pointerdown",this.onPointerDown),this.domElement.addEventListener("wheel",this.onMouseWheel),window.addEventListener("keydown",this.onKeyDown,!1),window.addEventListener("keyup",this.onKeyUp,!1),sm||(this.domElement.addEventListener("gesturestart",this.onGesture),this.domElement.addEventListener("gesturechange",this.onGesture),this.domElement.addEventListener("gestureend",this.onGesture)),this.domElement.addEventListener("touchend",this.onTouchEnd),this.hoverRotatePanMode!==0&&!this.useWindowEvents&&(this.domElement.addEventListener("pointerleave",this.onPointerLeave),this.domElement.addEventListener("pointerenter",this.onPointerEnter)),this.pointerLeaveEvent=void 0}dispose(){this.domElement.removeEventListener("contextmenu",this.onContextMenu),this.domElement.removeEventListener("pointerdown",this.onPointerDown),this.domElement.removeEventListener("wheel",this.onMouseWheel),window.removeEventListener("keydown",this.onKeyDown,!1),window.removeEventListener("keyup",this.onKeyUp,!1),this.domElement.removeEventListener("pointermove",this.onPointerHover),window.removeEventListener("pointermove",this.onPointerHover),sm||(this.domElement.removeEventListener("gesturestart",this.onGesture),this.domElement.removeEventListener("gesturechange",this.onGesture),this.domElement.removeEventListener("gestureend",this.onGesture)),this.domElement.removeEventListener("touchend",this.onTouchEnd),this.domElement.removeEventListener("pointerleave",this.onPointerLeave),this.domElement.removeEventListener("pointerenter",this.onPointerEnter),this.domElement.removeEventListener("pointermove",this.onPointerMove),this.domElement.removeEventListener("pointerup",this.onPointerUp)}applyLimits(e,t,i,r,s,n,a,o){this.overShoot.set(0,0);let l,h,d;e instanceof M?(l=e.x,h=e.y,this.current.set(this.target.x,this.target.y),d=!0):(l=e.theta,h=e.phi,this.current.set(Zs(this.spherical.theta),Zs(this.spherical.phi)),d=!1),i===0&&(this.current.x+=l,this.current.y+=h),(t===3||t===2)&&(!d&&this.isThetaFlipped?this.current.x>r&&this.current.x<0?this.overShoot.x=r-this.current.x:this.current.x<s&&this.current.x>0&&(this.overShoot.x=s-this.current.x):this.current.x>r?this.overShoot.x=r-this.current.x:this.current.x<s&&(this.overShoot.x=s-this.current.x),r===s&&(l=0)),(t===3||t===1)&&(this.current.y>n?this.overShoot.y=n-this.current.y:this.current.y<a&&(this.overShoot.y=a-this.current.y),n===a&&(h=0)),d||(this.overShoot.x=Zs(this.overShoot.x),this.overShoot.y=Zs(this.overShoot.y)),i!==0?(this.overRatio.copy(this.overShoot).divide(o),this.overRatio.x=Math.min(Math.abs(this.overRatio.x),1),this.overRatio.y=Math.min(Math.abs(this.overRatio.y),1),i===1&&(this.overRatio.x=yb(Math.abs(this.overRatio.x)),this.overRatio.y=yb(Math.abs(this.overRatio.y))),this.isPointerDown||i===1?i===2&&(this.overRatio.x>.9||this.overRatio.y>.9)?this.isPointerDown=!1:(l*this.overShoot.x<0&&(l*=1-this.overRatio.x),h*this.overShoot.y<0&&(h*=1-this.overRatio.y)):i===2&&(!d&&(this.overRatio.x>.002||this.overRatio.y>.002)||d&&(Math.abs(this.overShoot.x)>2||Math.abs(this.overShoot.y)>2)?(l=this.overShoot.x*.05,h=this.overShoot.y*.05,d?this.isPanOverShoot=!0:this.isRotateOverShoot=!0):d?this.isPanOverShoot=!1:this.isRotateOverShoot=!1)):(l+=this.overShoot.x,h+=this.overShoot.y),e instanceof M?(e.x=l,e.y=h):(e.theta=l,e.phi=h)}setEnableDampingSpeed(e){this.enableDamping=e,zc=e===!0?.2:1}stopDamping(){this.sphericalDelta.theta=0,this.sphericalDelta.phi=0}getAutoRotationAngle(){return 2*Math.PI/60/60*mb}getZoomScale(){return Math.pow(.95,gb)}rotateLeft(e){this.sphericalDelta.theta-=e}rotateUp(e){this.sphericalDelta.phi-=e}panLeft(e,t){this.panLeftV.setFromMatrixColumn(t,0),this.panLeftV.multiplyScalar(-e),this.panOffset.add(this.panLeftV)}panUp(e,t){this.panUpV.setFromMatrixColumn(t,1),this.panUpV.multiplyScalar(e),this.panOffset.add(this.panUpV)}pan(e,t){let i=this.domElement;if(i&&this.object.isPerspectiveCamera){let r=this.object.position;this.panV.copy(r).sub(this.target);let s=this.panV.length();s*=Math.tan(this.object.fov/2*Math.PI/180),this.panLeft(2*e*s/i.clientHeight,this.object.matrix),this.panUp(2*t*s/i.clientHeight,this.object.matrix)}else i&&this.object.isOrthographicCamera&&(this.panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this.panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix));this.dispatchEvent(oH)}dollyOut(e){this.object.isPerspectiveCamera?this.scale/=e:this.object.isOrthographicCamera&&(this.object.zoom*=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(pb)}dollyIn(e){this.object.isPerspectiveCamera?this.scale*=e:this.object.isOrthographicCamera&&(this.object.zoom/=e,this.zoomLimitsEnabled&&(this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom))),this.object.updateProjectionMatrix(),this.zoomChanged=!0),this.dispatchEvent(pb)}zoomOut(e=this.getZoomScale()){this.dispatchEvent(_l),this.dollyOut(e),this.dispatchEvent(Sl)}zoomIn(e=this.getZoomScale()){this.dispatchEvent(_l),this.dollyIn(e),this.dispatchEvent(Sl)}handleMouseDownRotate(e){this.rotateStart.set(e.clientX,e.clientY)}handleMouseDownDolly(e){this.dollyStart.set(e.clientX,e.clientY)}handleMouseDownPan(e){this.panStart.set(e.clientX,e.clientY)}handleMouseMoveRotate(e,t=1){Du&&Ou<15.5&&!Si?(this.rotateEnd.set(e.clientX,e.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart),this.rotateStart.copy(this.rotateEnd)):this.rotateDelta.set(e.movementX,e.movementY),this.rotateDelta.multiplyScalar(zc*t).rotateAround(fb,-this.object.angleOffsetFromUp);let i=this.domElement;this.rotateLeft(2*Math.PI*this.rotateDelta.x/i.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/i.clientHeight),this.update()}handleMouseMoveDolly(e){this.dollyEnd.set(e.clientX,e.clientY),this.dollyDelta.subVectors(this.dollyEnd,this.dollyStart),this.dollyDelta.y>0?this.dollyOut(this.getZoomScale()):this.dollyDelta.y<0&&this.dollyIn(this.getZoomScale()),this.dollyStart.copy(this.dollyEnd),this.update()}handleMouseMovePan(e,t=1){Du&&Ou<15.5&&!Si?(this.panEnd.set(e.clientX,e.clientY),this.panDelta.subVectors(this.panEnd,this.panStart),this.panStart.copy(this.panEnd)):this.panDelta.set(e.movementX,e.movementY),this.panDelta.multiplyScalar(Fc*t),this.pan(this.panDelta.x,this.panDelta.y),this.update()}handleMouseWheel(e){if(g5===!1&&uc(e)===!1&&dH(e)===!0){if(this.enablePan===!1)return;this.gesture?(this.panDelta.set(-e.deltaX,-e.deltaY).multiplyScalar(Fc),this.panDelta.x=Math.min(Math.abs(this.panDelta.x),100)*(this.panDelta.x<0?-1:1),this.panDelta.y=Math.min(Math.abs(this.panDelta.y),100)*(this.panDelta.y<0?-1:1),e.altKey?this.pan(0,this.panDelta.y):e.shiftKey?this.pan(this.panDelta.x,0):this.pan(this.panDelta.x,this.panDelta.y),this.update()):(this.gesture=!0,this.isPointerDown=!0),window.clearTimeout(this.timer),this.timer=window.setTimeout(()=>{this.gesture=!1,this.isPointerDown=!1},30)}else{if(this.enableZoom===!1)return;e.deltaY===0?e.deltaX<0?this.dollyIn(this.getZoomScale()):e.deltaX>0&&this.dollyOut(this.getZoomScale()):e.deltaY<0?this.dollyIn(this.getZoomScale()):e.deltaY>0&&this.dollyOut(this.getZoomScale()),this.update(),this.gesture=!1,this.isPointerDown=!1}}handleTouchStartRotate(){if(Ze.length===2){let e=.5*(Ze[0].pageX+Ze[1].pageX),t=.5*(Ze[0].pageY+Ze[1].pageY);this.rotateStart.set(e,t)}else this.rotateStart.set(Ze[0].pageX,Ze[0].pageY)}handleTouchStartPan(){if(Ze.length===2){let e=.5*(Ze[0].pageX+Ze[1].pageX),t=.5*(Ze[0].pageY+Ze[1].pageY);this.panStart.set(e,t)}else this.panStart.set(Ze[0].pageX,Ze[0].pageY)}handleTouchStartDolly(){let e=Ze[0].pageX-Ze[1].pageX,t=Ze[0].pageY-Ze[1].pageY,i=Math.sqrt(e*e+t*t);this.dollyStart.set(0,i)}handleTouchStartDollyPan(){this.enableZoom&&this.handleTouchStartDolly(),this.enablePan&&this.handleTouchStartPan()}handleTouchStartDollyRotate(){this.enableZoom&&this.handleTouchStartDolly(),this.enableRotate&&this.handleTouchStartRotate()}handleTouchMoveRotate(e){if(Ze.length===2){let i=Sp(e),r=.5*(e.pageX+i.x),s=.5*(e.pageY+i.y);this.rotateEnd.set(r,s)}else{if(e.pointerId!==Ze[0].pointerId)return;this.rotateEnd.set(e.pageX,e.pageY)}this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(zc);let t=this.domElement;t&&(this.rotateLeft(2*Math.PI*this.rotateDelta.x/t.clientHeight),this.rotateUp(2*Math.PI*this.rotateDelta.y/t.clientHeight)),this.rotateStart.copy(this.rotateEnd)}handleTouchMovePan(e){if(Ze.length===2){let t=Sp(e),i=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this.panEnd.set(i,r)}else{if(e.pointerId!==Ze[0].pointerId)return;this.panEnd.set(e.pageX,e.pageY)}this.panDelta.subVectors(this.panEnd,this.panStart).multiplyScalar(Fc),this.pan(this.panDelta.x,this.panDelta.y),this.panStart.copy(this.panEnd)}handleTouchMoveDolly(e){let t=Sp(e),i=e.pageX-t.x,r=e.pageY-t.y,s=Math.sqrt(i*i+r*r);this.dollyEnd.set(0,s),this.dollyDelta.set(0,Math.pow(this.dollyEnd.y/this.dollyStart.y,gb)),this.dollyOut(this.dollyDelta.y),this.dollyStart.copy(this.dollyEnd)}handleTouchMoveDollyPan(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enablePan&&this.handleTouchMovePan(e)}handleTouchMoveDollyRotate(e){this.enableZoom&&this.handleTouchMoveDolly(e),this.enableRotate&&this.handleTouchMoveRotate(e)}};function Zs(e){let t=Math.PI*2;for(;e<=-Math.PI;)e+=t;for(;e>Math.PI;)e-=t;return e}function yb(e){return 1-Math.pow(1-e,4)}function dH(e){return e.wheelDeltaY===0||e.deltaY===0?ud&&e.shiftKey&&Math.abs(e.wheelDeltaX)>=120?!1:e.wheelDeltaX?e.wheelDeltaX===-3*e.deltaX:e.deltaMode===0:e.wheelDeltaY?e.wheelDeltaY===-3*e.deltaY:e.deltaMode===0}var uf=new WeakMap,pH=class extends $m{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,i,r){let s=new Pf(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,n=>{let a={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(n,a).then(t).catch(r)},i,r)}decodeDracoFile(e,t,i,r){let s={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!i};this.decodeGeometry(e,s).then(t)}decodeGeometry(e,t){for(let o in t.attributeTypes){let l=t.attributeTypes[o];l.BYTES_PER_ELEMENT!==void 0&&(t.attributeTypes[o]=l.name)}let i=JSON.stringify(t);if(uf.has(e)){let o=uf.get(e);if(o.key===i)return o.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r,s=this.workerNextTaskID++,n=e.byteLength,a=this._getWorker(s,n).then(o=>(r=o,new Promise((l,h)=>{r._callbacks[s]={resolve:l,reject:h},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(o=>this._createGeometry(o.geometry));return a.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),uf.set(e,{key:i,promise:a}),a}_createGeometry(e){let t=new ke;e.index&&t.setIndex(new qe(e.index.array,1));for(let i=0;i<e.attributes.length;i++){let r=e.attributes[i],s=r.name,n=r.array,a=r.itemSize;t.setAttribute(s,new qe(n,a))}return t}_loadLibrary(e,t){let i=new Pf(this.manager);return i.setPath(this.decoderPath),i.setResponseType(t),i.setWithCredentials(this.withCredentials),new Promise((r,s)=>{i.load(e,r,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{let r=i[0];e||(this.decoderConfig.wasmBinary=i[1]);let s=fH.toString(),n=["/* draco decoder */",r,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
|
|
4918
|
-
`);this.workerSourceURL=URL.createObjectURL(new Blob([n]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let r=new Worker(this.workerSourceURL);r._callbacks={},r._taskCosts={},r._taskLoad=0,r.postMessage({type:"init",decoderConfig:this.decoderConfig}),r.onmessage=function(s){let n=s.data;switch(n.type){case"decode":r._callbacks[n.id].resolve(n);break;case"error":r._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(r)}else this.workerPool.sort(function(r,s){return r._taskLoad>s._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}};function fH(){let e,t;onmessage=function(a){let o=a.data;switch(o.type){case"init":e=o.decoderConfig,t=new Promise(function(d){e.onModuleLoaded=function(c){d({draco:c})},DracoDecoderModule(e)});break;case"decode":let l=o.buffer,h=o.taskConfig;t.then(d=>{let c=d.draco,u=new c.Decoder,p=new c.DecoderBuffer;p.Init(new Int8Array(l),l.byteLength);try{let m=i(c,u,p,h),g=m.attributes.map(f=>f.array.buffer);m.index&&g.push(m.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:m},g)}catch(m){console.error(m),self.postMessage({type:"error",id:o.id,error:m.message})}finally{c.destroy(p),c.destroy(u)}});break}};function i(a,o,l,h){let d=h.attributeIDs,c=h.attributeTypes,u,p,m=o.GetEncodedGeometryType(l);if(m===a.TRIANGULAR_MESH)u=new a.Mesh,p=o.DecodeBufferToMesh(l,u);else if(m===a.POINT_CLOUD)u=new a.PointCloud,p=o.DecodeBufferToPointCloud(l,u);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!p.ok()||u.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+p.error_msg());let g={index:null,attributes:[]};for(let f in d){let v=self[c[f]],y,b;if(h.useUniqueIDs)b=d[f],y=o.GetAttributeByUniqueId(u,b);else{if(b=o.GetAttributeId(u,a[d[f]]),b===-1)continue;y=o.GetAttribute(u,b)}g.attributes.push(s(a,o,u,f,v,y))}return m===a.TRIANGULAR_MESH&&(g.index=r(a,o,u)),a.destroy(u),g}function r(a,o,l){let h=l.num_faces()*3,d=h*4,c=a._malloc(d);o.GetTrianglesUInt32Array(l,d,c);let u=new Uint32Array(a.HEAPF32.buffer,c,h).slice();return a._free(c),{array:u,itemSize:1}}function s(a,o,l,h,d,c){let u=c.num_components(),p=l.num_points()*u,m=p*d.BYTES_PER_ELEMENT,g=n(a,d),f=a._malloc(m);o.GetAttributeDataArrayForAllPoints(l,c,g,m,f);let v=new d(a.HEAPF32.buffer,f,p).slice();return a._free(f),{name:h,array:v,itemSize:u}}function n(a,o){switch(o){case Float32Array:return a.DT_FLOAT32;case Int8Array:return a.DT_INT8;case Int16Array:return a.DT_INT16;case Int32Array:return a.DT_INT32;case Uint8Array:return a.DT_UINT8;case Uint16Array:return a.DT_UINT16;case Uint32Array:return a.DT_UINT32}}}var un;function mH(){return un||(un=new pH,un.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),un.decoderPending}async function gH(e){if(un){let t={attributeIDs:un.defaultAttributeIDs,attributeTypes:un.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await un.decodeGeometry(new Int8Array(e).buffer,t)}catch(r){console.error(r)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([r,s])=>({name:r,itemSize:s.itemSize,array:s.array}))}}return null}async function vH(e,t){let[i,r]=i_(Xf.deserialize(new Uint8Array(e)));Y5(i);let s=[];i.scene.objects.traverse((n,a)=>{a.type==="Mesh"&&a.geometry.type==="NonParametricGeometry"&&a.geometry.data.draco!==void 0&&s.push(a)}),s.length&&await mH();for(let n of s){let a=await gH(fi(n.geometry.data.draco));if(a){a.index&&(n.geometry.data.index={array:a.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let o={};a.attributes.forEach(({name:l,array:h,itemSize:d})=>{o[l]={array:h,itemSize:d,type:"Float32Array",normalized:!1}}),n.geometry.data.attributes=o,n.geometry.data.draco=void 0}}return t&&t(i),r.result().data}var xb=Object.keys(JS).filter(e=>isNaN(Number(e))),yH=class{constructor(e,t,i,r,s,n,a,o,l,h){this.preventScroll=s,this.hideCursor=n,this.requestRender=o,this.isEnable=!1,this.onResetRaycaster=()=>{this.eventContext.raycasterNeedsUpdate=!0},this.onTouchMovePreventScroll=d=>{(d.touches.length>1||this.preventScroll)&&d.preventDefault()},this.onMouseWheelPreventScroll=d=>{this.preventScroll&&d.preventDefault()},this.eventContext=new c8(e,t,i,a,r,h??!1),this.handlers={Spline:new _j(this.eventContext),Conditional:new Pj(this.eventContext),Start:new Vj(this.eventContext),Basic:new Aj(this.eventContext,l,this),MouseHover:new kj(this.eventContext),Scroll:new Hj(this.eventContext),Follow:new Ij(this.eventContext),LookAt:new Fj(this.eventContext)}}activate(){let{scene:e,domElement:t,eventElement:i}=this.eventContext;this.hideCursor&&(t.style.cursor="none"),this.isEnable=!0,e.traverseEntity(r=>{r.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(r=>r.connect()),this.resize(),xb.forEach(r=>{Object.values(this.handlers).some(s=>s.domEventsNeeded.has(r))&&(t.addEventListener(r,this.onResetRaycaster),i.addEventListener(r,this.onResetRaycaster))}),t.addEventListener("wheel",this.onMouseWheelPreventScroll),t.addEventListener("touchmove",this.onTouchMovePreventScroll)}deactivate(){let{scene:e,domElement:t}=this.eventContext;this.isEnable=!1,t.style.cursor="",Object.values(this.handlers).forEach(i=>i.disconnect()),e.traverseEntity(i=>{i.removeEventListener("requestRender",this.requestRender)}),xb.forEach(i=>{t.removeEventListener(i,this.onResetRaycaster)}),t.removeEventListener("touchmove",this.onTouchMovePreventScroll),t.removeEventListener("wheel",this.onMouseWheelPreventScroll)}reset(){this.deactivate(),this.activate()}resize(){this.eventContext.updaterRect()}updateUseWindowEvents(e){console.log("EventManager.updateUseWindowEvents",e),this.eventContext.useWindowEvents=e,
|
|
4918
|
+
`);this.workerSourceURL=URL.createObjectURL(new Blob([n]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){let r=new Worker(this.workerSourceURL);r._callbacks={},r._taskCosts={},r._taskLoad=0,r.postMessage({type:"init",decoderConfig:this.decoderConfig}),r.onmessage=function(s){let n=s.data;switch(n.type){case"decode":r._callbacks[n.id].resolve(n);break;case"error":r._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(r)}else this.workerPool.sort(function(r,s){return r._taskLoad>s._taskLoad?-1:1});let i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this}};function fH(){let e,t;onmessage=function(a){let o=a.data;switch(o.type){case"init":e=o.decoderConfig,t=new Promise(function(d){e.onModuleLoaded=function(c){d({draco:c})},DracoDecoderModule(e)});break;case"decode":let l=o.buffer,h=o.taskConfig;t.then(d=>{let c=d.draco,u=new c.Decoder,p=new c.DecoderBuffer;p.Init(new Int8Array(l),l.byteLength);try{let m=i(c,u,p,h),g=m.attributes.map(f=>f.array.buffer);m.index&&g.push(m.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:m},g)}catch(m){console.error(m),self.postMessage({type:"error",id:o.id,error:m.message})}finally{c.destroy(p),c.destroy(u)}});break}};function i(a,o,l,h){let d=h.attributeIDs,c=h.attributeTypes,u,p,m=o.GetEncodedGeometryType(l);if(m===a.TRIANGULAR_MESH)u=new a.Mesh,p=o.DecodeBufferToMesh(l,u);else if(m===a.POINT_CLOUD)u=new a.PointCloud,p=o.DecodeBufferToPointCloud(l,u);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!p.ok()||u.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+p.error_msg());let g={index:null,attributes:[]};for(let f in d){let v=self[c[f]],y,b;if(h.useUniqueIDs)b=d[f],y=o.GetAttributeByUniqueId(u,b);else{if(b=o.GetAttributeId(u,a[d[f]]),b===-1)continue;y=o.GetAttribute(u,b)}g.attributes.push(s(a,o,u,f,v,y))}return m===a.TRIANGULAR_MESH&&(g.index=r(a,o,u)),a.destroy(u),g}function r(a,o,l){let h=l.num_faces()*3,d=h*4,c=a._malloc(d);o.GetTrianglesUInt32Array(l,d,c);let u=new Uint32Array(a.HEAPF32.buffer,c,h).slice();return a._free(c),{array:u,itemSize:1}}function s(a,o,l,h,d,c){let u=c.num_components(),p=l.num_points()*u,m=p*d.BYTES_PER_ELEMENT,g=n(a,d),f=a._malloc(m);o.GetAttributeDataArrayForAllPoints(l,c,g,m,f);let v=new d(a.HEAPF32.buffer,f,p).slice();return a._free(f),{name:h,array:v,itemSize:u}}function n(a,o){switch(o){case Float32Array:return a.DT_FLOAT32;case Int8Array:return a.DT_INT8;case Int16Array:return a.DT_INT16;case Int32Array:return a.DT_INT32;case Uint8Array:return a.DT_UINT8;case Uint16Array:return a.DT_UINT16;case Uint32Array:return a.DT_UINT32}}}var un;function mH(){return un||(un=new pH,un.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),un.decoderPending}async function gH(e){if(un){let t={attributeIDs:un.defaultAttributeIDs,attributeTypes:un.defaultAttributeTypes,useUniqueIDs:!1},i;try{i=await un.decodeGeometry(new Int8Array(e).buffer,t)}catch(r){console.error(r)}if(i)return{index:i.index?{array:i.index.array}:void 0,attributes:Object.entries(i.attributes).map(([r,s])=>({name:r,itemSize:s.itemSize,array:s.array}))}}return null}async function vH(e,t){let[i,r]=i_(Xf.deserialize(new Uint8Array(e)));Y5(i);let s=[];i.scene.objects.traverse((n,a)=>{a.type==="Mesh"&&a.geometry.type==="NonParametricGeometry"&&a.geometry.data.draco!==void 0&&s.push(a)}),s.length&&await mH();for(let n of s){let a=await gH(fi(n.geometry.data.draco));if(a){a.index&&(n.geometry.data.index={array:a.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let o={};a.attributes.forEach(({name:l,array:h,itemSize:d})=>{o[l]={array:h,itemSize:d,type:"Float32Array",normalized:!1}}),n.geometry.data.attributes=o,n.geometry.data.draco=void 0}}return t&&t(i),r.result().data}var xb=Object.keys(JS).filter(e=>isNaN(Number(e))),yH=class{constructor(e,t,i,r,s,n,a,o,l,h){this.preventScroll=s,this.hideCursor=n,this.requestRender=o,this.isEnable=!1,this.onResetRaycaster=()=>{this.eventContext.raycasterNeedsUpdate=!0},this.onTouchMovePreventScroll=d=>{(d.touches.length>1||this.preventScroll)&&d.preventDefault()},this.onMouseWheelPreventScroll=d=>{this.preventScroll&&d.preventDefault()},this.eventContext=new c8(e,t,i,a,r,h??!1),this.handlers={Spline:new _j(this.eventContext),Conditional:new Pj(this.eventContext),Start:new Vj(this.eventContext),Basic:new Aj(this.eventContext,l,this),MouseHover:new kj(this.eventContext),Scroll:new Hj(this.eventContext),Follow:new Ij(this.eventContext),LookAt:new Fj(this.eventContext)}}activate(){let{scene:e,domElement:t,eventElement:i}=this.eventContext;this.hideCursor&&(t.style.cursor="none"),this.isEnable=!0,e.traverseEntity(r=>{r.addEventListener("requestRender",this.requestRender)}),Object.values(this.handlers).forEach(r=>r.connect()),this.resize(),xb.forEach(r=>{Object.values(this.handlers).some(s=>s.domEventsNeeded.has(r))&&(t.addEventListener(r,this.onResetRaycaster),i.addEventListener(r,this.onResetRaycaster))}),t.addEventListener("wheel",this.onMouseWheelPreventScroll),t.addEventListener("touchmove",this.onTouchMovePreventScroll)}deactivate(){let{scene:e,domElement:t}=this.eventContext;this.isEnable=!1,t.style.cursor="",Object.values(this.handlers).forEach(i=>i.disconnect()),e.traverseEntity(i=>{i.removeEventListener("requestRender",this.requestRender)}),xb.forEach(i=>{t.removeEventListener(i,this.onResetRaycaster)}),t.removeEventListener("touchmove",this.onTouchMovePreventScroll),t.removeEventListener("wheel",this.onMouseWheelPreventScroll)}reset(){this.deactivate(),this.activate()}resize(){this.eventContext.updaterRect()}updateUseWindowEvents(e){let t=this.isEnable;t&&this.deactivate(),console.log("EventManager.updateUseWindowEvents",{value:e,wasEnabled:t}),this.eventContext.useWindowEvents=e,t&&this.activate()}},xH=class{constructor(e,t,i,r,s){this._aspect=1,this._renderer=e,this._camera=t,this._frameSize=new H().copy(i),this._editorSize=new H().copy(r),this._aspect=t.aspect,this._fov=s??t.fov}set frameSize(e){this._frameSize.copy(e)}updateRenderer(){!this._renderer||this._renderer.setSize(this._frameSize.x,this._frameSize.y)}updateViewportForImageExport(){if(!this._renderer||!this._camera||this._camera.cameraType!=="PerspectiveCamera")return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.x,r=this._editorSize.y;this._aspect=e/t,this._camera.zoom*=Math.min(i/e,r/t),this._renderer.setViewport(0,0,e,t)}updateViewport(){if(!this._renderer||!this._camera||this._camera.cameraType!=="PerspectiveCamera")return;let e=this._frameSize.x,t=this._frameSize.y,i=this._editorSize.x,r=this._editorSize.y,s=0,n=0,a=e,o=t;e<i&&(s=(i-e)*.5,s=-s,a=i),t<r&&(n=(r-t)*.5,n=-n,o=r),this._aspect=a/o,this._renderer.setViewport(s,n,a,o)}updateCamera(){if(this._camera)if(this._camera.cameraType==="PerspectiveCamera"){let e=this._frameSize.y,t=this._editorSize.y,i=this._fov;if(e>t){let r=bH(e,1080,2160,1,15)/100;i*=e/t,i*=1-r}this._camera.aspect=this._aspect,this._camera.fov=i,this._camera.updateProjectionMatrix()}else this._camera.setViewplaneSize(this._frameSize.x,this._frameSize.y)}setCamera(e){this._camera=e,this._aspect=e.aspect,this._fov=e.fov}revert(){let e=window.innerWidth,t=window.innerHeight;this._renderer&&(this._renderer.setViewport(0,0,e,t),this._renderer.setSize(e,t)),this._camera&&(this._camera.aspect=e/t,this._camera.fov=this._fov,this._camera.setViewplaneSize(e,t),this._camera.updateProjectionMatrix())}};function bH(e,t,i,r,s){return(e-t)/(i-t)*(s-r)+r}var AA={RED:0,GREEN:1,BLUE:2,ALPHA:3},Ah="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",wH=`#ifdef FRAMEBUFFER_PRECISION_HIGH
|
|
4919
4919
|
uniform mediump sampler2D inputBuffer;
|
|
4920
4920
|
#else
|
|
4921
4921
|
uniform lowp sampler2D inputBuffer;
|