@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.44 kB
JavaScript
import{Object3DFeature as t,getFeatureBy as o,utils as e}from"@vladkrutenyuk/three-kvy-core";import*as r from"three";import{RapierPhysics as i}from"./RapierPhysics.js";import{Rigidbody as s}from"./Rigidbody.js";const{assertDefined:n,traverseUp:l}=e;class c extends t{get col(){return n(this._col,"col")}constructor(t,o){super(t),this._params=null!=o?o:p}set(t){const o=this._col;return t&&o&&t(o),this._setter=t,this}useCtx(t){var e;const r=this.object,s=i.findInCtx(t);if(!s)throw new Error("'RapierPhysics' is not found in context");const n=s.world,c=s.api,[p,...f]=this._params,m=c.ColliderDesc[p](...f);if(!m)throw new Error("Collider type is incorrect");let v=null,y=null;if(y=null===(e=o(r,h))||void 0===e?void 0:e.rb,y?v=r:l(r,(t=>{var e;const r=null===(e=o(t,h))||void 0===e?void 0:e.rb;return r&&(y=r,v=t),!r})),y){if(v&&v!==r){const t=a.set(0,0,0),o=d.set(0,0,0,1);v.worldToLocal(r.getWorldPosition(t));const e=r.getWorldQuaternion(d),i=v.getWorldQuaternion(u);o.copy(i.invert()).multiply(e),m.setTranslation(t.x,t.y,t.z).setRotation(o)}}else{const t=r.getWorldPosition(a),o=r.getWorldQuaternion(d);m.setTranslation(t.x,t.y,t.z).setRotation(o)}const w=n.createCollider(m,y);return this._setter&&this._setter(w),this._col=w,()=>{n.removeCollider(w,!0),this._col=void 0}}}const a=new r.Vector3,d=new r.Quaternion,u=new r.Quaternion,h=t=>t instanceof s,p=["cuboid",.5,.5,.5];export{c as Collider};
//# sourceMappingURL=Collider.js.map