@vladkrutenyuk/three-kvy-core
Version:
Everything you need to create any-complexity 3D apps with Three.js. Empower Three.js with a modular, lifecycle-managed context that seamlessly propagates through objects via reusable features providing structured logic.
3 lines (2 loc) • 1.22 kB
JavaScript
import{utils as e,CoreContextModule as t}from"@vladkrutenyuk/three-kvy-core";const{vecFromTuple:s}=e,{defineProps:r,readOnly:o}=e.props;class i extends t{constructor(e,t={}){super(),this._steppingState={accumulator:0},this.stepWorld=e=>{this.emit("stepbefore"),this.world.timestep=e,this.world.step(),this.emit("stepafter")};const{timeStep:i="vary",gravity:n=[0,-9.81,0]}=t,a=new e.World(s(n));this.timeStep=i,console.log(`Rapier version: ${e.version()}`),r(this,{isRapierPhysics:o(!0),api:o(e),world:o(a),eventQueue:o(new e.EventQueue(!1))})}useCtx(e){const t=e.findModuleKey(n);t&&e.modules[t]!==this&&console.warn(`Instance of 'RapierPhysics' has already been assigned to this context by key '${t}'`);const s=this.world,r=e.three,o=this._steppingState,i=()=>{const t=this.timeStep,s="vary"===t,r=Math.max(Math.min(.1,e.deltaTime),0);if(s)this.stepWorld(r);else for(o.accumulator+=r;o.accumulator>=t;)this.stepWorld(t),o.accumulator-=t};return r.on("renderbefore",i),()=>{r.off("renderbefore",i),s.free()}}static findInCtx(e){const t=e.modules.rapier;if(t&&t instanceof i)return t;const s=e.findModule(n);return s||void 0}}const n=e=>e instanceof i;export{i as RapierPhysics};
//# sourceMappingURL=RapierPhysics.js.map