Chunk loading improvements
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user