Remove a concave pair at a given index
| 201 | |
| 202 | // Remove a concave pair at a given index |
| 203 | void OverlappingPairs::removeConcavePairWithIndex(uint64 pairIndex, bool removeFromColliders) { |
| 204 | |
| 205 | RP3D_PROFILE("OverlappingPairs::removeConcavePairWithIndex()", mProfiler); |
| 206 | |
| 207 | const uint64 nbConcavePairs = mConcavePairs.size(); |
| 208 | |
| 209 | assert(pairIndex < nbConcavePairs); |
| 210 | |
| 211 | assert(mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider1).find(mConcavePairs[pairIndex].pairID) != mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider1).end()); |
| 212 | assert(mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider2).find(mConcavePairs[pairIndex].pairID) != mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider2).end()); |
| 213 | |
| 214 | if (removeFromColliders) { |
| 215 | |
| 216 | // Remove the involved overlapping pair from the two colliders |
| 217 | mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider1).remove(mConcavePairs[pairIndex].pairID); |
| 218 | mColliderComponents.getOverlappingPairs(mConcavePairs[pairIndex].collider2).remove(mConcavePairs[pairIndex].pairID); |
| 219 | } |
| 220 | |
| 221 | assert(mMapConcavePairIdToPairIndex[mConcavePairs[pairIndex].pairID] == pairIndex); |
| 222 | mMapConcavePairIdToPairIndex.remove(mConcavePairs[pairIndex].pairID); |
| 223 | |
| 224 | // Destroy all the LastFrameCollisionInfo objects |
| 225 | mConcavePairs[pairIndex].destroyLastFrameCollisionInfos(); |
| 226 | |
| 227 | // Change the mapping between the pairId and the index in the convex pairs array if we swap the last item with the one to remove |
| 228 | if (mConcavePairs.size() > 1 && pairIndex < (nbConcavePairs - 1)) { |
| 229 | |
| 230 | mMapConcavePairIdToPairIndex[mConcavePairs[nbConcavePairs - 1].pairID] = pairIndex; |
| 231 | } |
| 232 | |
| 233 | // We want to keep the arrays tightly packed. Therefore, when a pair is removed, |
| 234 | // we replace it with the last element of the array. |
| 235 | mConcavePairs.removeAtAndReplaceByLast(pairIndex); |
| 236 | } |
| 237 | |
| 238 | // Enable an overlapping pair (because at least one body of the pair is awaken or not static anymore) |
| 239 | void OverlappingPairs::enablePair(uint64 pairId) { |
no test coverage detected