public bool IsColliding(PhysicalObject victim) { return hitbox.Intersects(victim.hitbox) && PixelCollision(victim); }
private bool PixelCollision(PhysicalObject victim) { IdleAnimation.Texture.GetData(0, idlePlayer.CurrentFrame, textureData, 0, textureData.Length); victim.IdleAnimation.Texture.GetData(0, victim.idlePlayer.CurrentFrame, victim.textureData, 0, victim.textureData.Length); int x1 = Math.Max(hitbox.X, victim.HitBox.X); int x2 = Math.Min(hitbox.X + hitbox.Width, victim.HitBox.X + victim.HitBox.Width); int y1 = Math.Max(hitbox.Y, victim.HitBox.Y); int y2 = Math.Min(hitbox.Y + hitbox.Height, victim.HitBox.Y + victim.HitBox.Height); for (int y = y1; y < y2; y++) { for (int x = x1; x < x2; x++) { // Get the color of both pixels at this point Color a = textureData[(x - hitbox.X) + (y - hitbox.Y) * Width]; Color b = victim.textureData[(x - victim.hitbox.X) + (y - victim.hitbox.Y) * victim.Width]; // If both pixels are not completely transparent, if (a.A > 127 && b.A > 127) return true; } } return false; }