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 | 274 | result += getRigidBody(); |
| 275 | 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 | +} | |