finish events
This commit is contained in:
+19
-12
@@ -1,16 +1,7 @@
|
||||
import * as RAPIER from '@dimforge/rapier3d'
|
||||
|
||||
// export type PhysicsObject = {
|
||||
// mesh: THREE.Mesh
|
||||
// collider: Rapier.Collider
|
||||
// rigidBody: Rapier.RigidBody
|
||||
// fn?: Function
|
||||
// autoAnimate: boolean
|
||||
// }
|
||||
|
||||
class Physics{
|
||||
constructor(){
|
||||
|
||||
constructor(engine){
|
||||
this.engine = engine
|
||||
}
|
||||
|
||||
init = async ()=>{
|
||||
@@ -25,6 +16,7 @@ class Physics{
|
||||
world.createCollider(colliderDesc, body.handle);
|
||||
this.world = world;
|
||||
this.physicsObjects = [];
|
||||
this.eventQueue = new RAPIER.EventQueue(true);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -34,6 +26,7 @@ class Physics{
|
||||
|
||||
// * Responsible for collision response
|
||||
const rigidBody = this.world.createRigidBody(rigidBodyDesc)
|
||||
rigidBody.userData = colliderSettings.userData || {};
|
||||
|
||||
let colliderDesc
|
||||
|
||||
@@ -73,6 +66,12 @@ class Physics{
|
||||
console.error('Collider Mesh Error: convex mesh creation failed.')
|
||||
}
|
||||
|
||||
if (colliderSettings.isSensor){
|
||||
colliderDesc.setSensor(true);
|
||||
colliderDesc.setActiveEvents(RAPIER.ActiveEvents.COLLISION_EVENTS);
|
||||
colliderDesc.setActiveCollisionTypes(RAPIER.ActiveCollisionTypes.KINEMATIC_FIXED);
|
||||
}
|
||||
|
||||
// * Responsible for collision detection
|
||||
const collider = this.world.createCollider(colliderDesc, rigidBody)
|
||||
|
||||
@@ -84,7 +83,7 @@ class Physics{
|
||||
}
|
||||
|
||||
step(){
|
||||
this.world.step()
|
||||
this.world.step(this.eventQueue)
|
||||
|
||||
for (let po of this.physicsObjects) {
|
||||
const autoAnimate = po.autoAnimate
|
||||
@@ -99,6 +98,14 @@ class Physics{
|
||||
const fn = po.fn
|
||||
fn && fn()
|
||||
}
|
||||
|
||||
this.eventQueue.drainCollisionEvents((handle1, handle2, started) => {
|
||||
/* Handle the collision event. */
|
||||
//console.log(this.world.getCollider(handle2), handle1, started)
|
||||
this.engine.dispatchEvent({
|
||||
type: 'collision', handle1, handle2, started
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user