many updates and improvements to chunk loading
This commit is contained in:
parent
7b9de49502
commit
e21945fe23
6 changed files with 194 additions and 68 deletions
32
gen.c
32
gen.c
|
@ -2,6 +2,7 @@
|
|||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
Chunk *chunks = NULL;
|
||||
int lastI = 0;
|
||||
|
@ -58,31 +59,37 @@ double perlin_calc(double x, double y, double s) {
|
|||
}
|
||||
|
||||
Chunk fetch_chunk(int x, int y, int z, int ci) {
|
||||
if (chunks == NULL) {
|
||||
chunks = calloc(CBUF_ALL * CHUNK_DIAMETER_H, sizeof(Chunk));
|
||||
}
|
||||
|
||||
Chunk *chunks2 = &chunks[CBUF_ALL * ci];
|
||||
|
||||
Chunk chunk;
|
||||
|
||||
int i, j;
|
||||
for (j = 0; j < CBUF_ALL; j++) {
|
||||
i = (j + lastI) % CBUF_ALL;
|
||||
i = j;
|
||||
chunk = chunks2[i];
|
||||
if (chunk.x == x && chunk.y == y && chunk.z == z && chunk.exists) {
|
||||
// lastI = i;
|
||||
return chunk;
|
||||
}
|
||||
}
|
||||
|
||||
for (j = CBUF_ALL - 1; j >= 0; j--) {
|
||||
i = j;
|
||||
chunk = chunks2[i];
|
||||
if (!chunk.exists)
|
||||
break;
|
||||
}
|
||||
|
||||
char fname[1024];
|
||||
snprintf(fname, 1023, "./db/chunk_%i_%i_%i.dat", x, y, z);
|
||||
|
||||
FILE *fp = fopen(fname, "rb+");
|
||||
|
||||
int code = (fp) ? fread(&chunk, sizeof(Chunk), 1, fp) : 0;
|
||||
if (code != 0) {
|
||||
fclose(fp);
|
||||
return chunk;
|
||||
}
|
||||
if (!fp) {
|
||||
fp = fopen(fname, "wb");
|
||||
}
|
||||
|
||||
lastI = i;
|
||||
|
||||
if (i > CBUF_ALL - 1)
|
||||
|
@ -100,7 +107,7 @@ Chunk fetch_chunk(int x, int y, int z, int ci) {
|
|||
for (int z2 = 0; z2 < CHUNK_LENGTH; z2++) {
|
||||
int z3 = z2 + z * CHUNK_LENGTH;
|
||||
double hp = perlin_calc(x3, z3, 128.0);
|
||||
hp = ((hp > 0.0) ? -1.0 : 1.0) * (pow(fabs(hp),0.7));
|
||||
hp = ((hp > 0.0) ? -1.0 : 1.0) * (pow(fabs(hp), 0.7));
|
||||
hp *= 32.0;
|
||||
int h = hp + 32;
|
||||
|
||||
|
@ -114,6 +121,9 @@ Chunk fetch_chunk(int x, int y, int z, int ci) {
|
|||
|
||||
chunks2[i] = chunk;
|
||||
|
||||
fwrite(&chunk, sizeof(Chunk), 1, fp);
|
||||
fclose(fp);
|
||||
|
||||
return chunk;
|
||||
}
|
||||
|
||||
|
@ -123,7 +133,7 @@ void purge_chunks(int ci) {
|
|||
chunks = calloc(CBUF_ALL, sizeof(Chunk));
|
||||
*/
|
||||
if (chunks == NULL) {
|
||||
chunks = calloc(CBUF_ALL * CHUNK_DIAMETER_H, sizeof(Chunk));
|
||||
chunks = calloc(CBUF_ALL * (CHUNK_DIAMETER_H + (MAX_R * 2)), sizeof(Chunk));
|
||||
}
|
||||
memset(&chunks[CBUF_ALL * ci], 0, sizeof(Chunk) * CBUF_ALL);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue