public void Update(DynamicEntity entity)
        {
            //x
            Rectangle xBounds = new Rectangle((int)entity.CollisionBounds().X + (int)Math.Round(entity.velocity.X), (int)entity.CollisionBounds().Y, entity.CollisionBounds().Width, entity.CollisionBounds().Height);

            for (int i = 0; i < collisionMap.Length; i++)
            {
                if (collisionMap[i] == 1)
                {
                    int       xPos       = i % (int)mapDimensions.X * tileSize;
                    int       yPos       = i / (int)mapDimensions.X * tileSize;
                    Rectangle tileBounds = new Rectangle(xPos, yPos, tileSize, tileSize);
                    if (tileBounds.Intersects(xBounds))
                    {
                        float intersectionDepth = GetHorzDepth(xBounds, tileBounds);
                        xBounds.X += (int)intersectionDepth;
                        entity.SetXPosition(xBounds.X);
                        entity.velocity.X = 0;
                    }
                }
            }

            for (int i = 0; i < scene.LiveEntities.Count; i++)
            {
                if (scene.LiveEntities[i] is CollidableEntity)
                {
                    Rectangle entityCollision = ((CollidableEntity)scene.LiveEntities[i]).CollisionBounds();
                    if (entityCollision.Intersects(xBounds) && scene.LiveEntities[i].GetId() != entity.GetId())
                    {
                        float intersectionDepth = GetHorzDepth(xBounds, entityCollision);
                        xBounds.X += (int)intersectionDepth;
                        entity.SetXPosition(xBounds.X);
                        entity.velocity.X = 0;
                    }
                }
            }

            //y
            Rectangle yBounds = new Rectangle((int)entity.CollisionBounds().X, (int)entity.CollisionBounds().Y + (int)Math.Round(entity.velocity.Y), entity.CollisionBounds().Width, entity.CollisionBounds().Height);

            for (int i = 0; i < collisionMap.Length; i++)
            {
                if (collisionMap[i] == 1)
                {
                    int       xPos       = i % (int)mapDimensions.X * tileSize;
                    int       yPos       = i / (int)mapDimensions.X * tileSize;
                    Rectangle tileBounds = new Rectangle(xPos, yPos, tileSize, tileSize);
                    if (tileBounds.Intersects(yBounds))
                    {
                        float intersectionDepth = GetVertDepth(yBounds, tileBounds);
                        yBounds.Y += (int)intersectionDepth;
                        entity.SetYPosition(yBounds.Y);
                        entity.velocity.Y = 0;
                    }
                }
            }

            //other entities
            for (int i = 0; i < scene.LiveEntities.Count; i++)
            {
                if (scene.LiveEntities[i] is CollidableEntity)
                {
                    Rectangle entityCollision = ((CollidableEntity)scene.LiveEntities[i]).CollisionBounds();
                    if (entityCollision.Intersects(yBounds) && scene.LiveEntities[i].GetId() != entity.GetId())
                    {
                        float intersectionDepth = GetVertDepth(yBounds, entityCollision);
                        yBounds.Y += (int)intersectionDepth;
                        entity.SetYPosition(yBounds.Y);
                        entity.velocity.Y = 0;
                    }
                }
            }
        }
        public bool IsColliding(DynamicEntity entity, out Entity collidedEntity)
        {
            collidedEntity = null;

            //x
            Rectangle xBounds = new Rectangle((int)entity.CollisionBounds().X + (int)Math.Round(entity.velocity.X), (int)entity.CollisionBounds().Y, entity.CollisionBounds().Width, entity.CollisionBounds().Height);

            for (int i = 0; i < collisionMap.Length; i++)
            {
                if (collisionMap[i] == 1)
                {
                    int       xPos       = i % (int)mapDimensions.X * tileSize;
                    int       yPos       = i / (int)mapDimensions.X * tileSize;
                    Rectangle tileBounds = new Rectangle(xPos, yPos, tileSize, tileSize);
                    if (tileBounds.Intersects(xBounds))
                    {
                        return(true);
                    }
                }
            }

            for (int i = 0; i < scene.LiveEntities.Count; i++)
            {
                if (scene.LiveEntities[i] is CollidableEntity)
                {
                    Rectangle entityCollision = ((CollidableEntity)scene.LiveEntities[i]).CollisionBounds();
                    if (entityCollision.Intersects(xBounds) && scene.LiveEntities[i].GetId() != entity.GetId())
                    {
                        collidedEntity = scene.LiveEntities[i];
                        return(true);
                    }
                }
            }

            //y
            Rectangle yBounds = new Rectangle((int)entity.CollisionBounds().X, (int)entity.CollisionBounds().Y + (int)Math.Round(entity.velocity.Y), entity.CollisionBounds().Width, entity.CollisionBounds().Height);

            for (int i = 0; i < collisionMap.Length; i++)
            {
                if (collisionMap[i] == 1)
                {
                    int       xPos       = i % (int)mapDimensions.X * tileSize;
                    int       yPos       = i / (int)mapDimensions.X * tileSize;
                    Rectangle tileBounds = new Rectangle(xPos, yPos, tileSize, tileSize);
                    if (tileBounds.Intersects(yBounds))
                    {
                        return(true);
                    }
                }
            }

            //other entities
            for (int i = 0; i < scene.LiveEntities.Count; i++)
            {
                if (scene.LiveEntities[i] is CollidableEntity)
                {
                    Rectangle entityCollision = ((CollidableEntity)scene.LiveEntities[i]).CollisionBounds();
                    if (entityCollision.Intersects(yBounds) && scene.LiveEntities[i].GetId() != entity.GetId())
                    {
                        collidedEntity = scene.LiveEntities[i];
                        return(true);
                    }
                }
            }
            return(false);
        }