Sprite CollideBottomDiagonals(Sprite hero, Vector2 tileIndex, Sprite playerPrediction) { Sprite tile = game.levelGrid(int)tileIndex.X,(int)tileIndex.Y]; int leftEdgeDistance = Math.Abs(tile.leftEdge - playerPrediction.rightEdge); int rightEdgeDistance = Math.Abs(tile.rightEdge - playerPrediction.leftEdge); int topEdgeDistance = Math.Abs(tile.topEdge - playerPrediction.bottomEdge); if (IsColliding(playerPrediction, tile) == true) { if (topEdgeDistance < rightEdgeDistance && topEdgeDistance < leftEdgeDistance) { //if the top edge is closes, collision is happening to the right of the platform hero.Position.Y = tile.topEdge - hero.height + hero.offset.Y; hero.velocity.Y = 0; } else if (rightEdgeDistance < leftEdgeDistance) { hero.Position.X = rightEdgeDistance + hero.offset.X; hero.velocity.X = 0; } else { hero.Position.X = tile.leftEdge - hero.width + hero.offset.X; hero.velocity.X = 0; } Sprite CollideBellow (Sprite hero, Vector2 titleIndex, Sprite playerPrediction) { Sprite tile = game.levelGrid(int)tileIndex.X, (int)tileIndex.Y]; int leftEdgeDistance = Math.Abs(tile.rightEdge - playerPrediction.leftEdge); int rightEdgeDistance = Math.Abs(tile.leftEdge - playerPrediction.rightEdge); int bottomEdgeDistance = Math.Abs(tile.topEdge - playerPrediction.bottomEdge); if (IsColliding(playerPrediction, tile ) == tile) { hero.Position.Y = tile.bottomEdge + hero.offset.Y; hero.velocity.Y = 0; } else if (leftEdgeDistance < rightEdgeDistance) { hero.Position.X = tile.rightEdge + hero.offset.Y; hero.velocity.X = 0; } } } }