| 642 | } |
| 643 | |
| 644 | void BackgroundLoader::updateChunk(const PxVec3& cameraPos) |
| 645 | { |
| 646 | ChunkID id = getChunkIdFromPosition(cameraPos, mTerrainRange, mChunkWidth); |
| 647 | if( id.id == mCurChunkId.id) |
| 648 | return; |
| 649 | |
| 650 | mLocalBounds = PxBounds3::centerExtents( PxVec3(id.coord.x*mChunkWidth, 0.0f, id.coord.y*mChunkWidth), PxVec3(mChunkWidth)); |
| 651 | updateDynamicChunkId(); |
| 652 | |
| 653 | mCurChunkId = id; |
| 654 | CoordType x = PxClamp(id.coord.x, (CoordType)mHalfRange, (CoordType)(mTerrainRange - mHalfRange)); |
| 655 | CoordType y = PxClamp(id.coord.y, (CoordType)mHalfRange, (CoordType)(mTerrainRange - mHalfRange)); |
| 656 | |
| 657 | std::vector<ChunkID> requestQueue; |
| 658 | for( CoordType i = PxMax( (CoordType)0, (CoordType)(x - mHalfRange) ); i <= PxMin( (CoordType)N2, (CoordType)(x + mHalfRange)); i++ ) |
| 659 | { |
| 660 | for( CoordType j = PxMax( (CoordType)0, (CoordType)(y - mHalfRange)); j <= PxMin( (CoordType)N2, (CoordType)(y + mHalfRange)); j++ ) |
| 661 | { |
| 662 | ChunkID id; |
| 663 | id.coord.x = i; |
| 664 | id.coord.y = j; |
| 665 | requestQueue.push_back(id); |
| 666 | } |
| 667 | } |
| 668 | |
| 669 | mQueueLock.lock(); |
| 670 | mRequestQueue = requestQueue; |
| 671 | mQueueLock.unlock(); |
| 672 | mRequestReady.set(); |
| 673 | } |
| 674 | |
| 675 | static const char* getPlatformName() |
| 676 | { |