From 1b0f6d0f59650772bac4588d1733c061ff50d8c8 Mon Sep 17 00:00:00 2001 From: pspeed42 Date: Sun, 27 Jul 2014 21:47:55 -0400 Subject: [PATCH] Fix for proper collision distance based on precedent. "I had one job..." --- .../java/com/jme3/bounding/BoundingSphere.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java index 3cc2888c5..3a175e83b 100644 --- a/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java +++ b/jme3-core/src/main/java/com/jme3/bounding/BoundingSphere.java @@ -850,9 +850,13 @@ public class BoundingSphere extends BoundingVolume { Vector3f part2 = ab; Vector3f p = center.add(a.add(part1.mult(u)).addLocal(part2.mult(v))); - CollisionResult r = new CollisionResult(); - r.setDistance((float)Math.sqrt(d) - radius); - r.setContactNormal(n.normalize()); + CollisionResult r = new CollisionResult(); + Vector3f normal = n.normalize(); + float dist = -normal.dot(a); // a is center relative, so -a points to center + dist = dist - radius; + + r.setDistance(dist); + r.setContactNormal(normal); r.setContactPoint(p); results.addCollision(r); return 1; @@ -920,7 +924,7 @@ public class BoundingSphere extends BoundingVolume { Vector3f cn = nearestPt.divide(-dist); CollisionResult r = new CollisionResult(); - r.setDistance(dist); + r.setDistance(dist - radius); r.setContactNormal(cn); r.setContactPoint(nearestPt.add(center)); results.addCollision(r); @@ -960,7 +964,7 @@ public class BoundingSphere extends BoundingVolume { Vector3f cn = nearestPt.divide(-dist); CollisionResult r = new CollisionResult(); - r.setDistance(dist); + r.setDistance(dist - radius); r.setContactNormal(cn); r.setContactPoint(nearestPt.add(center)); results.addCollision(r);