public void onCollisionWith(ICollidable obj, CollisioDirection dir)
        {
            if (noClip)
            {
                return;
            }
            // Console.WriteLine("Collided!");
            if (obj is WorldTile)
            {
                switch (dir)
                {
                case CollisioDirection.HORIZONTAL:
                    this.velocity.X = 0;
                    break;

                case CollisioDirection.VERTICAL:
                    this.velocity.Y = 0;
                    break;

                case CollisioDirection.BOTH:
                case CollisioDirection.NONE:
                default:
                    this.velocity = Point.Zero;
                    break;
                }
            }
        }
        public void Update(GameTime gameTime)
        {
            int size = collidables.Count;

            for (int i = 0; i < size; ++i)
            {
                for (int j = i + 1; j < size; ++j)
                {
                    ICollidable collidable1 = collidables[i];
                    ICollidable collidable2 = collidables[j];
                    if (collidable1 is WorldTile && collidable2 is WorldTile)
                    {
                        continue;
                    }
                    if (collidable1 != collidable2)
                    {
                        double    timePassed  = gameTime.ElapsedGameTime.TotalSeconds;
                        var       boxVelData1 = collidable1.getBoundingBoxAndVel();
                        var       boxVelData2 = collidable2.getBoundingBoxAndVel();
                        Rectangle box1        = boxVelData1.Item1;
                        Rectangle box2        = boxVelData2.Item1;
                        box1.Offset(new Point((int)(boxVelData1.Item2.X * timePassed), 0));
                        box2.Offset(new Point((int)(boxVelData2.Item2.X * timePassed), 0));
                        CollisioDirection dir = CollisioDirection.NONE;
                        bool collided         = false;
                        if (box1.Intersects(box2))
                        {
                            dir      = CollisioDirection.HORIZONTAL;
                            collided = true;
                        }
                        box1 = boxVelData1.Item1;
                        box2 = boxVelData2.Item1;
                        box1.Offset(new Point(0, (int)(boxVelData1.Item2.Y * timePassed)));
                        box2.Offset(new Point(0, (int)(boxVelData2.Item2.Y * timePassed)));
                        if (box1.Intersects(box2))
                        {
                            dir      = collided ? CollisioDirection.BOTH : CollisioDirection.VERTICAL;
                            collided = true;
                        }
                        if (collided)
                        {
                            collidable1.onCollisionWith(collidable2, dir);
                            collidable2.onCollisionWith(collidable1, dir);
                        }
                    }
                }
            }
        }