MCPcopy Create free account
hub / github.com/DanielChappuis/reactphysics3d / removeConcavePairWithIndex

Method removeConcavePairWithIndex

src/engine/OverlappingPairs.cpp:203–236  ·  view source on GitHub ↗

Remove a concave pair at a given index

Source from the content-addressed store, hash-verified

201
202// Remove a concave pair at a given index
203void 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)
239void OverlappingPairs::enablePair(uint64 pairId) {

Calls 6

sizeMethod · 0.45
findMethod · 0.45
endMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected