From 1d20d0700e46cefb76665de06f5df0c5c2117124 Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 15 Sep 2013 10:21:09 -0400 Subject: [PATCH] record the tile grid position of the closest collision found --- .../TileMapSweptSphereCollisionChecker.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/com/blarg/gdx/tilemap3d/TileMapSweptSphereCollisionChecker.java b/src/com/blarg/gdx/tilemap3d/TileMapSweptSphereCollisionChecker.java index 9fe0678..3def9a5 100644 --- a/src/com/blarg/gdx/tilemap3d/TileMapSweptSphereCollisionChecker.java +++ b/src/com/blarg/gdx/tilemap3d/TileMapSweptSphereCollisionChecker.java @@ -19,15 +19,19 @@ public class TileMapSweptSphereCollisionChecker implements SweptSphereWorldColli public TileMap tileMap; + public final TileCoord lastCollisionTilePosition = new TileCoord(); + @Override - public void checkForCollisions(SweptSphere sphere, BoundingBox possibleCollisionArea) { + public boolean checkForCollisions(SweptSphere sphere, BoundingBox possibleCollisionArea) { if (tileMap == null) throw new UnsupportedOperationException("No TileMap object is set."); - + min.set(0, 0, 0); max.set(0, 0, 0); float lastCollisionDistance = Float.MAX_VALUE; + boolean foundCollision = false; + lastCollisionTilePosition.set(0, 0, 0); // TODO: I don't think we even need to check if the area overlaps ... ? // (it probably always will, right?) @@ -77,13 +81,21 @@ public class TileMapSweptSphereCollisionChecker implements SweptSphereWorldColli // will contain info for the closest intersection // found boolean collided = SweptSphereCollisionTester.test(sphere, a, b, c); - if (collided && sphere.nearestCollisionDistance < lastCollisionDistance) + if (collided && sphere.nearestCollisionDistance < lastCollisionDistance) { + foundCollision = true; lastCollisionDistance = sphere.nearestCollisionDistance; + + // this is the closest collision found so far + // record the grid position ... + lastCollisionTilePosition.set(x, y, z); + } } } } } } } + + return foundCollision; } }