Showing the changes to libraries/physics/src/ObjectDynamic.cpp (1 of 7 files). Show all
Unified · Split
| @@ -274,3 +274,38 @@ QList<btRigidBody*> ObjectDynamic::getRigidBodies() { · 273 unmodified lines | |||
| 274 | result += getRigidBody(); | 274 | result += getRigidBody(); |
| 275 | return result; | 275 | return result; |
| 276 | } | 276 | } |
| 277 | |||
| 278 | SpatiallyNestablePointer ObjectDynamic::getOther() { | ||
| 279 | SpatiallyNestablePointer other; | ||
| 280 | withWriteLock([&]{ | ||
| 281 | if (_otherID == QUuid()) { | ||
| 282 | // no other | ||
| 283 | return; | ||
| 284 | } | ||
| 285 | other = _other.lock(); | ||
| 286 | if (other && other->getID() == _otherID) { | ||
| 287 | // other is already up-to-date | ||
| 288 | return; | ||
| 289 | } | ||
| 290 | if (other) { | ||
| 291 | // we have a pointer to other, but it's wrong | ||
| 292 | other.reset(); | ||
| 293 | _other.reset(); | ||
| 294 | } | ||
| 295 | // we have an other-id but no pointer to other cached | ||
| 296 | QSharedPointer<SpatialParentFinder> parentFinder = DependencyManager::get<SpatialParentFinder>(); | ||
| 297 | if (!parentFinder) { | ||
| 298 | return; | ||
| 299 | } | ||
| 300 | EntityItemPointer ownerEntity = _ownerEntity.lock(); | ||
| 301 | if (!ownerEntity) { | ||
| 302 | return; | ||
| 303 | } | ||
| 304 | bool success; | ||
| 305 | _other = parentFinder->find(_otherID, success, ownerEntity->getParentTree()); | ||
| 306 | if (success) { | ||
| 307 | other = _other.lock(); | ||
| 308 | } | ||
| 309 | }); | ||
| 310 | return other; | ||
| 311 | } | ||