3232#include " World.h"
3333#include < G3D/g3dmath.h>
3434
35- TerrainInfo::TerrainInfo (uint32 mapId) : _mapId(mapId), _parentTerrain(nullptr ), _cleanupTimer(randtime(CleanupInterval / 2 , CleanupInterval))
35+ TerrainInfo::TerrainInfo (uint32 mapId) : _mapId(mapId), _parentTerrain(nullptr ), _loadedGrids(), _cleanupTimer(randtime(CleanupInterval / 2 , CleanupInterval))
3636{
3737}
3838
@@ -180,7 +180,7 @@ void TerrainInfo::LoadMapAndVMapImpl(int32 gx, int32 gy)
180180 for (std::shared_ptr<TerrainInfo> const & childTerrain : _childTerrain)
181181 childTerrain->LoadMapAndVMapImpl (gx, gy);
182182
183- _loadedGrids[GetBitsetIndex (gx, gy)] = true ;
183+ _loadedGrids[gx] |= UI64LIT ( 1 ) << gy ;
184184}
185185
186186void TerrainInfo::LoadMMapInstanceImpl (uint32 mapId, uint32 instanceId)
@@ -279,7 +279,7 @@ void TerrainInfo::UnloadMapImpl(int32 gx, int32 gy)
279279 for (std::shared_ptr<TerrainInfo> const & childTerrain : _childTerrain)
280280 childTerrain->UnloadMapImpl (gx, gy);
281281
282- _loadedGrids[GetBitsetIndex (gx, gy)] = false ;
282+ _loadedGrids[gx] &= ~( UI64LIT ( 1 ) << gy) ;
283283}
284284
285285void TerrainInfo::UnloadMMapInstanceImpl (uint32 mapId, uint32 instanceId)
@@ -294,7 +294,7 @@ GridMap* TerrainInfo::GetGrid(uint32 mapId, float x, float y, bool loadIfMissing
294294 int32 gy = (int )(CENTER_GRID_ID - y / SIZE_OF_GRIDS); // grid y
295295
296296 // ensure GridMap is loaded
297- if (!_loadedGrids[GetBitsetIndex (gx, gy)] && loadIfMissing)
297+ if (!( _loadedGrids[gx] & ( UI64LIT ( 1 ) << gy)) && loadIfMissing)
298298 {
299299 std::lock_guard<std::mutex> lock (_loadMutex);
300300 LoadMapAndVMapImpl (gx, gy);
@@ -303,7 +303,7 @@ GridMap* TerrainInfo::GetGrid(uint32 mapId, float x, float y, bool loadIfMissing
303303 GridMap* grid = _gridMap[gx][gy].get ();
304304 if (mapId != GetId ())
305305 {
306- auto childMapItr = std::find_if (_childTerrain. begin (), _childTerrain. end () , [mapId ](std::shared_ptr<TerrainInfo> const & childTerrain) { return childTerrain->GetId () == mapId ; });
306+ auto childMapItr = std::ranges::find (_childTerrain, mapId , [](std::shared_ptr<TerrainInfo> const & childTerrain) { return childTerrain->GetId (); });
307307 if (childMapItr != _childTerrain.end () && (*childMapItr)->_gridMap [gx][gy])
308308 grid = (*childMapItr)->GetGrid (mapId, x, y, false );
309309 }
@@ -319,9 +319,10 @@ void TerrainInfo::CleanUpGrids(uint32 diff)
319319
320320 // delete those GridMap objects which have refcount = 0
321321 for (int32 x = 0 ; x < MAX_NUMBER_OF_GRIDS; ++x)
322- for (int32 y = 0 ; y < MAX_NUMBER_OF_GRIDS; ++y)
323- if (_loadedGrids[GetBitsetIndex (x, y)] && !_referenceCountFromMap[x][y])
324- UnloadMapImpl (x, y);
322+ if (_loadedGrids[x])
323+ for (int32 y = 0 ; y < MAX_NUMBER_OF_GRIDS; ++y)
324+ if ((_loadedGrids[x] & (UI64LIT (1 ) << y)) && !_referenceCountFromMap[x][y])
325+ UnloadMapImpl (x, y);
325326
326327 _cleanupTimer.Reset (CleanupInterval);
327328}
0 commit comments