protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) { this.Exit(); } KeyboardState keys = Keyboard.GetState(); JVector moveVector = JVector.Zero; float amountOfMovement = 0.05f; if (keys.IsKeyDown(Keys.Right)) { moveVector.X += amountOfMovement; } if (keys.IsKeyDown(Keys.Left)) { moveVector.X -= amountOfMovement; } if (keys.IsKeyDown(Keys.Down)) { moveVector.Y -= amountOfMovement; } if (keys.IsKeyDown(Keys.Up)) { moveVector.Y += amountOfMovement; } PB += moveVector; OA = (float)gameTime.TotalGameTime.TotalSeconds * 0.1f; OB = (float)gameTime.TotalGameTime.TotalSeconds * -0.1f; DrawBox(A, PA, OA, Color.Blue * 0.25f); DrawBox(B, PB, OB, Color.Green * 0.25f); float t = 0.0f; JVector[] CA = new JVector[2], CB = new JVector[2]; int NumContacts = 0; sw.Start(); JMatrix OAM = JMatrix.CreateRotationZ(OA); JMatrix OBM = JMatrix.CreateRotationZ(OB); for (int i = 0; i < 1; i++) { A.UpdateAxes(OA); B.UpdateAxes(OB); //hit = Collision.BoxBoxTest(ref A, ref PA, ref B, ref PB); //AV = new List<JVector> { A.GetCorner(0), A.GetCorner(1), A.GetCorner(2), A.GetCorner(3) }; //BV = new List<JVector> { B.GetCorner(0), B.GetCorner(1), B.GetCorner(2), B.GetCorner(3) }; //hit = SAT.Collide(ref AV, ref PA, ref VA, ref OAM, // ref BV, ref PB, ref VB, ref OBM, // ref normal, ref t); //if (hit) //{ // SAT.FindContacts(ref AV, ref PA, ref VA, ref OAM, // ref BV, ref PB, ref VB, ref OBM, // ref normal, t, out CA, out CB, out NumContacts); // normal.Normalize(); //} hit = Collision.BoxBoxTestContact(ref A, ref PA, ref OAM, ref B, ref PB, ref OBM, out normal, out t, out CA, out CB, out NumContacts); penetration = t; iterations = NumContacts; } sw.Stop(); ticks = sw.ElapsedTicks / 1; sw.Reset(); if (hit) { //DrawBox(A, PA + normal * (t * 0.5f), OA, Color.Blue); //DrawBox(B, PB - normal * (t * 0.5f), OB, Color.Green); for (int i = 0; i < NumContacts; i++) { DebugDrawer.DrawPoint(CA[i]); // + normal * (t * 0.5f)); DebugDrawer.DrawPoint(CB[i]); // - normal * (t * 0.5f)); } } base.Update(gameTime); }