private void swap(PhysicsMediator[] colliders, int left, int right) { var temp = colliders[right]; colliders[right] = colliders[left]; colliders[left] = temp; }
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; }
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); }
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; }