implement blocks data saving/loading

This commit is contained in:
MihailRis
2024-09-30 23:42:16 +03:00
parent e84c79839c
commit 28d746f371
11 changed files with 107 additions and 15 deletions
+4 -1
View File
@@ -18,6 +18,8 @@ class Inventory;
using chunk_inventories_map =
std::unordered_map<uint, std::shared_ptr<Inventory>>;
using BlocksMetadata = util::SmallHeap<uint16_t, uint8_t>;
class Chunk {
public:
int x, z;
@@ -32,12 +34,13 @@ public:
bool unsaved : 1;
bool loadedLights : 1;
bool entities : 1;
bool blocksData : 1;
} flags {};
/// @brief Block inventories map where key is index of block in voxels array
chunk_inventories_map inventories;
/// @brief Blocks metadata heap
util::SmallHeap<uint16_t, uint8_t> blocksMetadata;
BlocksMetadata blocksMetadata;
Chunk(int x, int z);
+5 -1
View File
@@ -383,7 +383,11 @@ void Chunks::set(
eraseSegments(prevdef, vox.state, gx, y, gz);
}
if (prevdef.dataStruct) {
chunk->blocksMetadata.free(chunk->blocksMetadata.find(index));
if (auto found = chunk->blocksMetadata.find(index)) {
chunk->blocksMetadata.free(found);
chunk->flags.unsaved = true;
chunk->flags.blocksData = true;
}
}
// block initialization
+1
View File
@@ -81,6 +81,7 @@ std::shared_ptr<Chunk> ChunksStorage::create(int x, int z) {
chunk->lightmap.set(lights.get());
chunk->flags.loadedLights = true;
}
chunk->blocksMetadata = regions.getBlocksData(chunk->x, chunk->z);
return chunk;
}