4 #include <dragonstd/list.h>
5 #include <dragonstd/tree.h>
11 #define CHUNK_ITERATE \
12 for (s32 x = 0; x < CHUNK_SIZE; x++) \
13 for (s32 y = 0; y < CHUNK_SIZE; y++) \
14 for (s32 z = 0; z < CHUNK_SIZE; z++)
16 #define CHUNK_MODE_PASSIVE 0
17 #define CHUNK_MODE_CREATE 1
19 typedef struct TerrainNode {
24 typedef TerrainNode TerrainChunkData[CHUNK_SIZE][CHUNK_SIZE][CHUNK_SIZE];
29 TerrainChunkData data;
31 pthread_rwlock_t lock;
36 pthread_rwlock_t lock;
38 pthread_rwlock_t cache_lock;
40 void (*create_chunk)(TerrainChunk *chunk);
41 void (*delete_chunk)(TerrainChunk *chunk);
42 bool (*get_chunk)(TerrainChunk *chunk, int mode);
43 void (*delete_node)(TerrainNode *node);
47 Terrain *terrain_create();
48 void terrain_delete(Terrain *terrain);
50 TerrainChunk *terrain_get_chunk(Terrain *terrain, v3s32 pos, int mode);
51 TerrainChunk *terrain_get_chunk_nodep(Terrain *terrain, v3s32 node_pos, v3s32 *offset, int mode);
53 Blob terrain_serialize_chunk(Terrain *terrain, TerrainChunk *chunk, void (*callback)(TerrainNode *node, Blob *buffer));
54 bool terrain_deserialize_chunk(Terrain *terrain, TerrainChunk *chunk, Blob buffer, void (*callback)(TerrainNode *node, Blob buffer));
56 TerrainNode terrain_get_node(Terrain *terrain, v3s32 pos);
58 v3s32 terrain_chunkp(v3s32 pos);
59 v3s32 terrain_offset(v3s32 pos);