finish events

This commit is contained in:
2025-10-29 13:34:54 +02:00
parent 93e03b4843
commit 127f71f345
8 changed files with 104 additions and 82 deletions
+19 -12
View File
@@ -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
})
});
}
}