pthread_rwlock_init(&map->rwlck, NULL);
map->sectors = array_create(sizeof(MapSector *));
map->sectors.cmp = §or_compare;
+ map->cached = NULL;
return map;
}
MapBlock *map_get_block(Map *map, v3s32 pos, bool create)
{
+ if (map->cached && map->cached->pos.x == pos.x && map->cached->pos.y == pos.y && map->cached->pos.z == pos.z)
+ return map->cached;
+
MapSector *sector = map_get_sector(map, (v2s32) {pos.x, pos.z}, create);
if (! sector)
return NULL;
pthread_rwlock_unlock(§or->rwlck);
- return block;
+ return map->cached = block;
}
MapBlock *map_allocate_block(v3s32 pos)