UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.94 kB
import{BODYFLAG_NORESPONSE_OBJECT as t,BODYGROUP_TRIGGER as e,BODYMASK_NOT_STATIC as i,BODYSTATE_ACTIVE_TAG as s,BODYSTATE_DISABLE_SIMULATION as o}from"../rigid-body/constants.js";let n,a,r;class d{constructor(t,e,i){this.entity=e.entity,this.component=e,this.app=t,"undefined"==typeof Ammo||n||(n=new Ammo.btVector3,a=new Ammo.btQuaternion,r=new Ammo.btTransform),this.initialize(i)}initialize(e){const i=this.entity,s=e.shape;if(s&&"undefined"!=typeof Ammo){i.trigger&&i.trigger.destroy();const e=1,o=this.component;if(o){const t=o.getShapePosition(),e=o.getShapeRotation();n.setValue(t.x,t.y,t.z),a.setValue(e.x,e.y,e.z,e.w)}else{const t=i.getPosition(),e=i.getRotation();n.setValue(t.x,t.y,t.z),a.setValue(e.x,e.y,e.z,e.w)}r.setOrigin(n),r.setRotation(a);const d=this.app.systems.rigidbody.createBody(e,s,r);d.setRestitution(0),d.setFriction(0),d.setDamping(0,0),n.setValue(0,0,0),d.setLinearFactor(n),d.setAngularFactor(n),d.setCollisionFlags(d.getCollisionFlags()|t),d.entity=i,this.body=d,this.component.enabled&&i.enabled&&this.enable()}}destroy(){const t=this.body;t&&(this.disable(),this.app.systems.rigidbody.destroyBody(t))}_getEntityTransform(t){const e=this.component;if(e){const t=e.getShapePosition(),i=e.getShapeRotation();n.setValue(t.x,t.y,t.z),a.setValue(i.x,i.y,i.z,i.w)}else{const t=this.entity.getPosition(),e=this.entity.getRotation();n.setValue(t.x,t.y,t.z),a.setValue(e.x,e.y,e.z,e.w)}t.setOrigin(n),t.setRotation(a)}updateTransform(){this._getEntityTransform(r);const t=this.body;t.setWorldTransform(r),t.activate()}enable(){const t=this.body;if(!t)return;const o=this.app.systems;o.rigidbody.addBody(t,e,i^e),o.rigidbody._triggers.push(this),t.forceActivationState(s),this.updateTransform()}disable(){const t=this.body;if(!t)return;const e=this.app.systems,i=e.rigidbody._triggers.indexOf(this);i>-1&&e.rigidbody._triggers.splice(i,1),e.rigidbody.removeBody(t),t.forceActivationState(o)}}export{d as Trigger};