/// <summary> /// Tests for path intersection with voxel. /// </summary> /// <returns>True iff path is clear; voxel does not intersect path.</returns> private bool TestVoxel(MyVoxelBase voxel, Capsule path, out Vector3?pointOfObstruction) { if (m_ignoreAsteroid) { m_logger.debugLog("Ignoring asteroid: " + voxel.getBestName()); pointOfObstruction = null; return(true); } Vector3[] intersection = new Vector3[2]; if (!path.IntersectsAABB(voxel, out intersection[0])) { m_logger.debugLog("path does not intersect AABB. " + voxel.getBestName(), Logger.severity.TRACE); pointOfObstruction = null; return(true); } if (!path.get_Reverse().IntersectsAABB(voxel, out intersection[1])) { m_logger.debugLog("Reversed path does not intersect AABB, perhaps it moved? " + voxel.getBestName(), Logger.severity.WARNING); pointOfObstruction = null; return(true); } Capsule testSection = new Capsule(intersection[0], intersection[1], path.Radius); IMyVoxelMap asteroid = voxel as IMyVoxelMap; if (asteroid != null) { if (testSection.Intersects(asteroid, out pointOfObstruction)) { return(false); } } // planet test is done by PlanetChecker m_logger.debugLog("Does not intersect path: " + voxel.getBestName(), Logger.severity.TRACE); pointOfObstruction = null; return(true); }