Пример #1
0
        public CollisionData Test(SatBodyData body1, SatBodyData body2)
        {
            bool bodiesSet = body1.Vertices.Length > 0 && body1.Normals.Length > 0 && body2.Vertices.Length > 0 && body2.Normals.Length > 0;

            if (!bodiesSet)
            {
                Logger.Error("Bodies for SAT test not set correctly");
                return(new CollisionData());
            }

            Projection1 = new SatProjectionData();
            Projection2 = new SatProjectionData();

            CollisionData c1 = ProjectNormals(body1, body2);

            if (!c1.Intersecting)
            {
                return(c1);
            }

            CollisionData c2 = ProjectNormals(body2, body1);

            if (!c2.Intersecting)
            {
                return(c2);
            }

            CollisionData result = c1;

            if (c1.Depth < c2.Depth)
            {
                result        = c2;
                result.Normal = -1.0f * result.Normal;
            }
            return(result);
        }
Пример #2
0
 public float GetMaxOverlap(SatProjectionData projectionData)
 {
     return(System.Math.Max(Max - projectionData.Min, projectionData.Max - Min));
 }
Пример #3
0
 public bool Overlaps(SatProjectionData projectionData)
 {
     return(projectionData.Max > Min && projectionData.Min < Max);
 }