// world.c #include #include "world.h" #include "chunkGenerator.h" #include "chunkRenderer.h" #include "chunkStructures.h" #include "chunkIO.h" #include void InitWorld(World *world) { for (int x = 0; x < WORLD_SIZE_X; x++) { for (int z = 0; z < WORLD_SIZE_Z; z++) { world->chunks[x][z] = malloc(sizeof(Chunk)); Chunk *chunk = world->chunks[x][z]; InitChunk(chunk, x, z); if (!LoadChunk(chunk)) { // Later //GenerateChunkTerrain(chunk); GenerateFlatChunk(chunk); SaveChunk(chunk); } chunk->mesh = GenerateChunkMesh(chunk); } } } void FreeWorld(World *world) { for (int x = 0; x < WORLD_SIZE_X; x++) { for (int z = 0; z < WORLD_SIZE_Z; z++) { Chunk *chunk = world->chunks[x][z]; if(chunk->hasChanged) SaveChunk(chunk); if (chunk) { UnloadMesh(chunk->mesh); free(chunk); } } } } Chunk *GetChunkContainingBlock(World *world, int wx, int wz) { int chunkX = wx / CHUNK_SIZE_X; int chunkZ = wz / CHUNK_SIZE_Z; if (wx < 0) chunkX--; if (wz < 0) chunkZ--; return GetChunk(world, chunkX, chunkZ); } void UpdateWorld(World *world) { // For now, stub function. Will handle streaming later. } Chunk *GetChunk(World *world, int chunkX, int chunkZ) { if (chunkX >= 0 && chunkX < WORLD_SIZE_X && chunkZ >= 0 && chunkZ < WORLD_SIZE_Z) { return world->chunks[chunkX][chunkZ]; } return NULL; }