Esempio n. 1
0
 private void swap(PhysicsMediator[] colliders, int left, int right)
 {
     var temp = colliders[right];
     colliders[right] = colliders[left];
     colliders[left] = temp;
 }
Esempio n. 2
0
 private int findPosition(PhysicsMediator[] ground, AABB3D movable)
 {
     for (int i = 0; i < ground.Length; i++)
     {
         if (ground[i].BoundingBox.Center.x  > movable.Center.x)
         {
             Debug.Log(i);
             return i;
         }
     }
     Debug.Log(0);
     return 0;
 }
Esempio n. 3
0
        private void quicksort(PhysicsMediator[] colliders, int first, int last)
        {
            int left = first;
            int right = last;
            int pivot = first;
            first++;

            while (last >= first)
            {
                if (compareAABBS(colliders[first], colliders[pivot]) >= 0 &&
                    compareAABBS(colliders[last], colliders[pivot]) < 0)
                    swap(colliders, first, last);
                else if (compareAABBS(colliders[first], colliders[pivot]) >= 0)
                    last--;
                else if (compareAABBS(colliders[last], colliders[pivot]) < 0)
                    first++;
                else
                {
                    last--;
                    first++;
                }
            }

            swap(colliders, pivot, last);
            pivot = last;
            if(pivot > left)
                quicksort(colliders, left, pivot);
            if(right > pivot + 1)
                quicksort(colliders, pivot + 1, right);
        }
Esempio n. 4
0
        private int compareAABBS(PhysicsMediator left, PhysicsMediator right)
        {
            float leftMin = 0f;
            float rightMin = 0f;
            if(left == null)
            {
                return 1;
            }
            else if( right == null)
            {
                return -1;
            }
            else
            {
                a = left.BoundingBox;
                b = right.BoundingBox;
                leftMin = a.Center.x - a.HalfWidth;
                rightMin = b.Center.x - b.HalfWidth;
            }

            if (leftMin < rightMin)
                return -1;
            if (leftMin > rightMin)
                return 1;
            return 0;
        }