void _TestMove(ref float dt, Vector2 ourVelocity, T2DCollisionComponent theirCollider, List<T2DCollisionInfo> collisions)
        {
            ReadOnlyArray<T2DCollisionImage> theirImages = theirCollider.Images;
            for (int i = 0; i < _collisionImages.Count; i++)
            {
                T2DCollisionImage ourImage = _collisionImages[i];
                for (int j = 0; j < theirImages.Count; j++)
                {
                    T2DCollisionImage theirImage = theirImages[j];

                    // Colliders need to know how to collide with objects with lower priority but not higher
                    if (ourImage.Priority >= theirImage.Priority)
                        ourImage.TestMove(ref dt, ourVelocity, theirImage, collisions);
                    else
                        theirImage.TestMoveAgainst(ref dt, ourVelocity, ourImage, collisions);
                }
            }
        }
        /// <summary>
        /// Test to see if SceneObject can move from current position along given velocity for given amount of time
        /// without colliding with world limits.
        /// </summary>
        /// <param name="dt">Duration to move object, in seconds.</param>
        /// <param name="searchBox">Box containing entire swept path of object bounds.  Used to short cut world bounds check.</param>
        /// <param name="velocity">Velocity of object.</param>
        /// <param name="collider">Collision component of object.</param>
        /// <param name="collisions">List of collisions encountered during move.</param>
        public void TestMove(ref float dt, RectangleF searchBox, Vector2 velocity, T2DCollisionComponent collider, List<T2DCollisionInfo> collisions)
        {
            if (WorldLimitResolveCollision != null || OnWorldLimit != null)
            {
                ReadOnlyArray<T2DCollisionImage> images = SceneObject.Collision.Images;
                for (int i = 0; i < images.Count; i++)
                {
                    T2DCollisionImage image = images[i];

                    if (searchBox.X + searchBox.Width > _moveLimitMax.X)
                    {
                        // test against max x
                        _worldLimitPoly[0] = new Vector2(_moveLimitMax.X, _moveLimitMin.Y - 5.0f);
                        _worldLimitPoly[1] = new Vector2(_moveLimitMax.X, _moveLimitMax.Y + 5.0f);
                        _worldLimitImage.CollisionPolyBasis = _worldLimitPoly;
                        image.TestMove(ref dt, velocity, _worldLimitImage, collisions);
                    }
                    if (searchBox.X < _moveLimitMin.X)
                    {
                        // test against min x
                        _worldLimitPoly[0] = new Vector2(_moveLimitMin.X, _moveLimitMax.Y + 5.0f);
                        _worldLimitPoly[1] = new Vector2(_moveLimitMin.X, _moveLimitMin.Y - 5.0f);
                        _worldLimitImage.CollisionPolyBasis = _worldLimitPoly;
                        image.TestMove(ref dt, velocity, _worldLimitImage, collisions);
                    }
                    if (searchBox.Y + searchBox.Height > _moveLimitMax.Y)
                    {
                        // test against max y
                        _worldLimitPoly[0] = new Vector2(_moveLimitMax.X + 5.0f, _moveLimitMax.Y);
                        _worldLimitPoly[1] = new Vector2(_moveLimitMin.X - 5.0f, _moveLimitMax.Y);
                        _worldLimitImage.CollisionPolyBasis = _worldLimitPoly;
                        image.TestMove(ref dt, velocity, _worldLimitImage, collisions);
                    }
                    if (searchBox.Y < _moveLimitMin.Y)
                    {
                        // test against min y
                        _worldLimitPoly[0] = new Vector2(_moveLimitMin.X - 5.0f, _moveLimitMin.Y);
                        _worldLimitPoly[1] = new Vector2(_moveLimitMax.X + 5.0f, _moveLimitMin.Y);
                        _worldLimitImage.CollisionPolyBasis = _worldLimitPoly;
                        image.TestMove(ref dt, velocity, _worldLimitImage, collisions);
                    }
                }
            }
        }