diff --git a/api/animate.js b/api/animate.js index 91ed8537..9dfbac84 100644 --- a/api/animate.js +++ b/api/animate.js @@ -24,7 +24,7 @@ const updateCapsuleShapeForAnimation = ( !physicsMesh || !physicsMesh.physics || !physicsMesh.physics.shape || - physicsMesh.physics.shape.constructor.name !== "_PhysicsShapeCapsule" + !(flock?.BABYLON?.PhysicsShapeCapsule && physicsMesh.physics.shape instanceof flock.BABYLON.PhysicsShapeCapsule) ) { return; } diff --git a/api/mesh.js b/api/mesh.js index 42d92f71..70ad33ed 100644 --- a/api/mesh.js +++ b/api/mesh.js @@ -72,7 +72,7 @@ export const flockMesh = { : null; if ( - physicsMesh?.physics?.shape?.constructor.name === "_PhysicsShapeCapsule" + physicsMesh?.physics?.shape instanceof flock.BABYLON.PhysicsShapeCapsule ) { const currentShape = physicsMesh.physics.shape; if ( diff --git a/api/physics.js b/api/physics.js index 9b460c21..932409cf 100644 --- a/api/physics.js +++ b/api/physics.js @@ -1,15 +1,13 @@ let flock; const getShapeTypeFromPhysics = (physics) => { - const shapeName = physics?.shape?.constructor?.name; - switch (shapeName) { - case "_PhysicsShapeCapsule": - return "CAPSULE"; - case "_PhysicsShapeMesh": - return "MESH"; - default: - return null; - } + if (!physics?.shape) return null; + const shape = physics.shape; + if (flock?.BABYLON?.PhysicsShapeCapsule && shape instanceof flock.BABYLON.PhysicsShapeCapsule) + return "CAPSULE"; + if (flock?.BABYLON?.PhysicsShapeMesh && shape instanceof flock.BABYLON.PhysicsShapeMesh) + return "MESH"; + return null; }; const capturePhysicsState = (targetMesh) => ({ @@ -168,8 +166,18 @@ export const flockPhysics = { Math.max(width, depth) / 2, flock.scene, ); + } else if (flock?.BABYLON?.PhysicsShapeCapsule && physicsShape instanceof flock.BABYLON.PhysicsShapeCapsule) { + detectedShapeType = "CAPSULE"; + newShape = createPhysicsShape(mesh, "CAPSULE"); + if (!newShape) return; + } else if (flock?.BABYLON?.PhysicsShapeMesh && physicsShape instanceof flock.BABYLON.PhysicsShapeMesh) { + detectedShapeType = "MESH"; + newShape = createPhysicsShape(mesh, "MESH"); + if (!newShape) return; } else { - detectedShapeType = getShapeTypeFromPhysics(parent.physics); + detectedShapeType = + getShapeTypeFromPhysics(parent.physics) || + parent.metadata?.physicsShapeType; if (!detectedShapeType) return; newShape = createPhysicsShape(mesh, detectedShapeType); if (!newShape) return;