Example #1
0
        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;
                    }
                }
                
            }
        }