61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
// world.c
|
|
#include <stdlib.h>
|
|
#include "world.h"
|
|
#include "chunkGenerator.h"
|
|
#include "chunkRenderer.h"
|
|
#include "chunkStructures.h"
|
|
#include "chunkIO.h"
|
|
#include <stdio.h>
|
|
|
|
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;
|
|
}
|