Chunk loading improvements

This commit is contained in:
2025-11-11 19:36:04 -06:00
parent 5c8b314689
commit d39ed1ea5a
12 changed files with 97 additions and 32 deletions

View File

@@ -12,7 +12,7 @@
map_t MAP;
void mapInit() {
errorret_t mapInit() {
memoryZero(&MAP, sizeof(map_t));
// Init the default chunks. In future I'll probably make this based on where
@@ -26,16 +26,20 @@ void mapInit() {
chunk->position.y = y;
chunk->position.z = z;
MAP.chunkOrder[index] = chunk;
mapChunkLoad(chunk);
errorChain(mapChunkLoad(chunk));
index++;
}
}
}
errorOk();
}
void mapPositionSet(const chunkpos_t newPos) {
errorret_t mapPositionSet(const chunkpos_t newPos) {
const chunkpos_t curPos = MAP.chunkPosition;
if(chunkPositionIsEqual(curPos, newPos)) return;
if(chunkPositionIsEqual(curPos, newPos)) {
errorOk();
}
// Determine which chunks remain loaded
chunkindex_t chunksRemaining[MAP_CHUNK_COUNT] = {0};
@@ -97,7 +101,7 @@ void mapPositionSet(const chunkpos_t newPos) {
chunkIndex = chunksFreed[--freedCount];
chunk_t *chunk = &MAP.chunks[chunkIndex];
chunk->position = newChunkPos;
mapChunkLoad(chunk);
errorChain(mapChunkLoad(chunk));
}
MAP.chunkOrder[orderIndex++] = &MAP.chunks[chunkIndex];
@@ -107,22 +111,44 @@ void mapPositionSet(const chunkpos_t newPos) {
// Update map position
MAP.chunkPosition = newPos;
errorOk();
}
void mapUpdate() {
}
void mapDispose() {
for(chunkindex_t i = 0; i < MAP_CHUNK_COUNT; i++) {
mapChunkUnload(&MAP.chunks[i]);
}
}
void mapChunkUnload(chunk_t* chunk) {
printf("Unloading chunk at (%d, %d, %d)\n",
for(uint8_t i = 0; i < chunk->meshCount; i++) {
meshDispose(&chunk->meshes[i]);
}
}
errorret_t mapChunkLoad(chunk_t* chunk) {
char_t buffer[64];
chunk->meshCount = 0;
snprintf(buffer, sizeof(buffer), "map/map/%d_%d_%d.dcf",
chunk->position.x,
chunk->position.y,
chunk->position.z
);
}
void mapChunkLoad(chunk_t* chunk) {
errorCatch(errorPrint(assetLoad("map/map/0_0.dcf", chunk)));
if(!assetFileExists(buffer)) {
memoryZero(chunk->tiles, sizeof(chunk->tiles));
errorOk();
}
errorChain(assetLoad(buffer, chunk));
errorOk();
}
chunkindex_t mapGetChunkIndexAt(const chunkpos_t position) {