public void HandlePlayer(Player p1, Wall w1)
        {
            if (p1 != null && w1 != null)
            {
                Rectangle p1Rect = p1.CollisionRectangle;
                Rectangle w1Rect = w1.CollisionRectangle;

                Vector2 p1Pos = p1.Position;
                Vector2 p2Pos = w1.Position;

                Vector2 penetrationDepth = RectangleExtensions.GetIntersectionDepth(p1Rect, w1Rect);
                penetrationDepth.X = Math.Abs(penetrationDepth.X);
                penetrationDepth.Y = Math.Abs(penetrationDepth.Y);

                Vector2 p1MovementDirection, p1Vel;
                p1MovementDirection = p1Vel = p1.Velocity;
                p1MovementDirection.X /= (p1MovementDirection.X != 0 ? Math.Abs(p1MovementDirection.X) : 1);
                p1MovementDirection.Y /= (p1MovementDirection.Y != 0 ? Math.Abs(p1MovementDirection.Y) : 1);

                Vector2 p2MovementDirection, p2Vel;
                p2MovementDirection = p2Vel = new Vector2(0,0);
                p2MovementDirection.X /= (p2MovementDirection.X != 0 ? Math.Abs(p2MovementDirection.X) : 1);
                p2MovementDirection.Y /= (p2MovementDirection.Y != 0 ? Math.Abs(p2MovementDirection.Y) : 1);

                if (penetrationDepth.X < penetrationDepth.Y || (p1MovementDirection.Y == 0 && p2MovementDirection.Y == 0))
                {
                    float valToMove = penetrationDepth.X;
                    if (p1MovementDirection.X != 0 && p2MovementDirection.X != 0)
                        valToMove = (float)Math.Ceiling(valToMove / 2);

                    p1Pos.X += valToMove * p1MovementDirection.X * -1;
                    p2Pos.X += valToMove * p2MovementDirection.X * -1;

                    p1Vel.X = 0;
                    p2Vel.X = 0;
                }
                else if (penetrationDepth.X >= penetrationDepth.Y || (p1MovementDirection.X == 0 && p2MovementDirection.X == 0))
                {
                    float valToMove = penetrationDepth.Y;
                    if (p1MovementDirection.Y != 0 && p2MovementDirection.Y != 0)
                        valToMove = (float)Math.Ceiling(valToMove / 2);

                    p1Pos.Y += valToMove * p1MovementDirection.Y * -1;
                    p2Pos.Y += valToMove * p2MovementDirection.Y * -1;

                    p1Vel.Y = 0;
                    p2Vel.Y = 0;
                }

                p1.KillPlayer();
                p1.Velocity=new Vector2(0,0);

            }
        }
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            audioPlayer = new AudioPlayer();

            background = new Background(Content.Load<Texture2D>("BGTile.png"), new Vector2(worldBounds.Width, worldBounds.Height),new Vector2(0,0));

            Texture2D playerNormalSprite = Content.Load<Texture2D>("PLAYER.png");
            Texture2D playerUpSprite = Content.Load<Texture2D>("PLAYER_UP.png");
            Texture2D playerDownSprite = Content.Load<Texture2D>("PLAYER_DOWN.png");

            spBoostSprite = Content.Load<Texture2D>("SPEEDBOOSTS.png");
            wallSprite = Content.Load<Texture2D>("WALL2.png");
            columnSprite = Content.Load<Texture2D>("LASER.png");
            fontTexture = Content.Load<Texture2D>("Font.png");
            font = Content.Load<SpriteFont>("HellaFont");

            worldLowerBound = 650;
            worldUpperBound = 50;

            columnSeperation = 500;
            firstColumnStartPosition = 1000;

            player = new Player(playerNormalSprite,playerUpSprite,playerDownSprite, new Vector2(0, 360), new Vector2(1, 0.4f), new Vector2(10, 10), columnSeperation, 3);

            level = new Level(wallSprite,columnSprite);
            level.GenerateWorldBounds(worldLowerBound, worldUpperBound, 80);//generate the worlds lower and upper walls which the pipes are attached to
            level.GenerateColumns(columnSeperation, player.Dimensions, 3, firstColumnStartPosition);

            playerScore = new UI(font, new Vector2(30, 60), 0, "Score: ", true);
            playerHiScore = new UI(font, new Vector2(600, 60), 0, "Hi Score: ", true);

            collisionResolver = new CollisionResolver();

            collisionResolver.Add(player);
            foreach (Wall wall in level.UpperWalls) { collisionResolver.Add(wall); }
            foreach (Wall wall in level.LowerWalls) { collisionResolver.Add(wall); }
            foreach (Column column in level.Columns)
            {
                List<Wall> columnComponents = column.ColumnComponents;
                foreach (Wall wall in columnComponents) { collisionResolver.Add(wall); }
            }
        }