public object[] collidesMTV(Hitbox hitBox1, Hitbox hitBox2) { Vector2 g1p = hitBox1.Position; Vector2 g1s = hitBox1.Size; Vector2 g2p = hitBox2.Position; Vector2 g2s = hitBox2.Size; bool doesCollide = CheckCollision(g1p.X, g1p.Y, g1s.X, g1s.Y, g2p.X, g2p.Y, g2s.X, g2s.Y); Vector2 mtv = new Vector2(0, 0); if (doesCollide) { mtv = new Vector2(1024 ^ 2, 1024 ^ 2); float[] edgeCorrespond = new float[] { g1p.X - (g2p.X + g2s.X), //left (g1p.X + g1s.X) - g2p.X, //right g1p.Y - (g2p.Y + g2s.Y), //top (g1p.Y + g1s.Y) - g2p.Y, //bottom }; for (int i = 0; i < edgeCorrespond.Length; i++) { if (Math.Abs(edgeCorrespond[i]) < mtv.Length()) { if (i == 0 || i == 1) { mtv = new Vector2(edgeCorrespond[i], 0); } else { mtv = new Vector2(0, edgeCorrespond[i]); }; } ; } ; } Debug.Print(mtv.ToString()); //Tuple.Create(doesCollide, mtv != null ? mtv : new Vector2()); return(new object[] { doesCollide, mtv != null ? mtv : new Vector2() }); }
public Ball(Vector2 startPos, int startDirection) { position_ = startPos; velocity_ = startDirection == 1 ? new Vector2(-100, -20) : new Vector2(100, 20); hitbox_ = new Hitbox(Size, position_); }