예제 #1
0
        public void Test3DCollision()
        {
            PolygonMesh.PolygonMeshCollisionResult Result = PolygonMesh.PolygonCollisionSAT(Player, CollisionBox, Vector3.Zero);
            Assert.IsTrue(Result.Collided);

            Player.Offset(0, 5, 0);
            Result = PolygonMesh.PolygonCollisionSAT(Player, CollisionBox, Vector3.Zero);
            Assert.AreEqual(-1, Result.Distance);
        }
예제 #2
0
        private void LinkAITunnelTogether()
        {
            foreach (AITunnel ActiveTunnel in ListAITunnel)
            {
                for (int T = ListAITunnel.Count - 1; T >= 0; --T)
                {
                    if (ListAITunnel[T] == ActiveTunnel)
                    {
                        continue;
                    }

                    float CurrentPosition = Vector3.Dot(ListAITunnel[T].Forward, ActiveTunnel.Position);
                    float OtherPosition   = Vector3.Dot(ListAITunnel[T].Forward, ListAITunnel[T].Position);

                    if (CurrentPosition < OtherPosition && PolygonMesh.PolygonCollisionSAT(ActiveTunnel.CollisionBox, ListAITunnel[T].CollisionBox, Vector3.Zero).Collided)
                    {
                        ActiveTunnel.ListNextAITunnel.Add(ListAITunnel[T]);
                    }
                }
            }
        }