import RAPIER from "@dimforge/rapier3d-compat"; import { Pilot } from "../../types"; export class PhysicsSystem { public world!: RAPIER.World; public rigidBodies = new Map(); public colliders = new Map(); public async init() { await RAPIER.init(); this.world = new RAPIER.World({ x: 0, y: -9.81, z: 0 }); } public dispose() { if (this.world) this.world.free(); } public addPhysicsBody(id: string, pilot: Pilot, radius: number = 15) { const desc = RAPIER.RigidBodyDesc.kinematicPositionBased() .setTranslation(pilot.x, pilot.y, pilot.z) .setUserData({ playerId: id }); const body = this.world.createRigidBody(desc); const colliderDesc = RAPIER.ColliderDesc.ball(radius); const collider = this.world.createCollider(colliderDesc, body); this.rigidBodies.set(id, body); this.colliders.set(id, collider); } public removePhysicsBody(id: string) { const body = this.rigidBodies.get(id); if (body) { this.world.removeRigidBody(body); this.rigidBodies.delete(id); this.colliders.delete(id); } } }