public static HkContactBodyData?CastShapeReturnContactBodyData(Vector3D to, HkShape shape, ref MatrixD transform, uint collisionFilter, float extraPenetration, bool ignoreConvexShape = true) { m_resultWorlds.Clear(); Clusters.Intersects(to, m_resultWorlds); if (m_resultWorlds.Count == 0) { return(null); } var world = m_resultWorlds[0]; Matrix transformF = transform; transformF.Translation = (Vector3)(transform.Translation - world.AABB.Center); Vector3 toF = (Vector3)(to - world.AABB.Center); HkContactBodyData?result = ((HkWorld)world.UserData).CastShapeReturnContactBodyData(toF, shape, ref transformF, collisionFilter, extraPenetration); if (result == null) { return(null); } HkContactBodyData cpd = result.Value; cpd.HitPosition += world.AABB.Center; return(cpd); }
public static bool CastShapeReturnContactBodyDatas(Vector3D to, HkShape shape, ref MatrixD transform, uint collisionFilter, float extraPenetration, List <HkContactBodyData> result, bool ignoreConvexShape = true) { m_resultWorlds.Clear(); Clusters.Intersects(to, m_resultWorlds); if (m_resultWorlds.Count == 0) { return(false); } var world = m_resultWorlds[0]; Matrix transformF = transform; transformF.Translation = (Vector3)(transform.Translation - world.AABB.Center); Vector3 toF = (Vector3)(to - world.AABB.Center); m_resultShapeCasts.Clear(); if (((HkWorld)world.UserData).CastShapeReturnContactBodyDatas(toF, shape, ref transformF, collisionFilter, extraPenetration, m_resultShapeCasts)) { foreach (var res in m_resultShapeCasts) { HkContactBodyData cpd = res.Value; cpd.HitPosition += world.AABB.Center; result.Add(cpd); } return(true); } return(false); }