| #ifndef INCLUDE_CAVE_PARSE_H |
| #define INCLUDE_CAVE_PARSE_H |
| |
| typedef struct |
| { |
| unsigned char block; |
| unsigned char data; |
| unsigned char light:4; |
| unsigned char skylight:4; |
| } raw_block; |
| |
| // this is the old fully-decoded chunk |
| typedef struct |
| { |
| int xpos, zpos, max_y; |
| int height[16][16]; |
| raw_block rb[16][16][256]; // [z][x][y] which becomes [y][x][z] in stb |
| } chunk; |
| |
| chunk *get_decoded_chunk(int chunk_x, int chunk_z); |
| |
| #define NUM_SEGMENTS 16 |
| typedef struct |
| { |
| int max_y, xpos, zpos; |
| |
| unsigned char *blockdata[NUM_SEGMENTS]; |
| unsigned char *data[NUM_SEGMENTS]; |
| unsigned char *skylight[NUM_SEGMENTS]; |
| unsigned char *light[NUM_SEGMENTS]; |
| |
| void *pointer_to_free; |
| |
| int refcount; // this allows multi-threaded building without wrapping in ANOTHER struct |
| } fast_chunk; |
| |
| fast_chunk *get_decoded_fastchunk(int chunk_x, int chunk_z); // cache, never call free() |
| |
| fast_chunk *get_decoded_fastchunk_uncached(int chunk_x, int chunk_z); |
| |
| #endif |