2 lines
1.7 KiB
JavaScript
2 lines
1.7 KiB
JavaScript
import{m as R,n as O,o as V,q as z,r as U,t as H,u as G,v as k,x as w,y as E,s as T,z as W,V as _,A as j,C as N}from"./model.vue.8f6f7b03.js";import{g as A}from"./useBVHMap.cc6f6f76.js";import{b as q}from"./computeBVH.6af4bc49.js";import"./entry.a42f0781.js";const y=new Set,F=()=>new WeakSet;R(function(){if(z())return;const s=A();if(!s.length)return;const c=O(),b=V(),h=.02,C=U(()=>{H.clear();for(const t of y){const a=t.bvhVelocity,o=t.outerObject3d,m=t.bvhHalfHeight,n=t.bvhRadius;a.y+=t.bvhOnGround?0:h*-c;const{position:r}=t.physicsUpdate;t.physicsUpdate={},r&&(r.x&&(a.x=0),r.y&&(a.y=0),r.z&&(a.z=0)),o.position.addScaledVector(a,h),o.updateMatrixWorld();const{start:i,end:l}=w;l.copy(i.copy(o.position));const v=Math.max(m-n,0);l.y+=v,i.y-=v;const B=i.clone();G.setFromCenterAndSize(o.position,k.set(n*2,m*2,n*2));const g=j,M=N;let d=0,p,S=!1,u;for(const x of s)u=q.get(x),x.shapecast({intersectsBounds:f=>f.intersectsBox(G),intersectsTriangle:f=>{d=f.closestPointToSegment(w,g,M),d<n&&(S=!0,p=M.sub(g).normalize().multiplyScalar(n-d),i.add(p),l.add(p))}});S&&u&&E(H,t,F).add(u);const e=i.sub(B);t.bvhOnGround=e.y>Math.abs(h*a.y*.25),b&&t.bvhOnGround&&Math.abs(e.y/(e.x+e.z+Number.EPSILON))<b&&(t.bvhOnGround=!1);const P=Math.max(0,e.length()-1e-5);e.normalize().multiplyScalar(P),o.position.add(e),t.bvhOnGround?a.set(0,0,0):(e.normalize(),a.addScaledVector(e,-e.dot(a)))}});return()=>{C.cancel()}},[A,O,V,z]);function K(s){if(s.done)return;T.attach(this.outerObject3d),this.width=this.depth=Math.min(this.width,this.depth),this.physicsUpdate={};const c=W(this).multiplyScalar(.5);this.bvhHalfHeight=Math.max(c.y,.5),this.bvhRadius=Math.max(c.x,.5),this.bvhVelocity=new _,y.add(this),s.then(()=>{y.delete(this),this.physicsUpdate=void 0})}export{K as default};
|