diff --git a/control.c b/control.c index 9b045da..2959247 100644 --- a/control.c +++ b/control.c @@ -197,7 +197,7 @@ void control_rclick(double cx, double cy, vec3 pos, struct item *inv, for (int i = 0; i < 10; i++) { if (inv[i].id == inv[slot].id) { inv[i].count--; - if (inv[i].count == 0) { + if (inv[i].count < 1) { inv[i].id = 0; inv[i].count = 0; } diff --git a/cubes.c b/cubes.c index f8090d1..6630135 100644 --- a/cubes.c +++ b/cubes.c @@ -166,15 +166,15 @@ void *cubes_chunk(void *args) { void cubes_free() { free(chunk_old); } -void cubes_refresh(int x, int y, int z, struct chunk dat) { +void cubes_refresh(int x, int y, int z, struct chunk dat, int state) { for (int i = 0; i < CHUNK_ALL; i++) { - if (chunk_old[i].exists != 0 && abs(((int)chunk_old[i].x) - x) <= 1 && - abs(((int)chunk_old[i].y) - y) <= 1 && - abs(((int)chunk_old[i].z) - z) <= 1) { - chunk_old[i].exists = 0; + if (chunk_old[i].x == x && chunk_old[i].y == y && chunk_old[i].z == z && chunk_old[i].exists != 0) { + chunk_old[i].exists = state; + break; } } - gen_save(dat); + if (state == 0) + gen_save(dat); } int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO, @@ -238,7 +238,7 @@ int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO, int cached = (old_chunk.x == pos.pos[0] / CHUNK_LENGTH && old_chunk.y == pos.pos[1] / CHUNK_LENGTH && - old_chunk.z == pos.pos[2] / CHUNK_LENGTH && old_chunk.exists != 0); + old_chunk.z == pos.pos[2] / CHUNK_LENGTH && old_chunk.exists != 0 && old_chunk.exists != 255); if (cached) { thread_id[a2] = -1; ib = i2[a]; diff --git a/cubes.h b/cubes.h index 2da4cd9..e62c47e 100644 --- a/cubes.h +++ b/cubes.h @@ -43,7 +43,7 @@ int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO, struct v3f *textO, int x, int y, int z, int is_purge, int *i2); void cubes_free(); -void cubes_refresh(int x, int y, int z, struct chunk dat); +void cubes_refresh(int x, int y, int z, struct chunk dat, int state); void cubes_rect(struct v3f *cube, int *i, double x1, double x2, double y1, double y2, int is_text, int text_x, int text_y); #endif \ No newline at end of file diff --git a/gen.c b/gen.c index 3841d00..278557d 100644 --- a/gen.c +++ b/gen.c @@ -142,7 +142,7 @@ int gen_cube(int x, int y, int z, struct chunk dat, int ci, int val) { if (val != -1) { dat = gen_find((x / CHUNK_LENGTH), (y / CHUNK_LENGTH), (z / CHUNK_LENGTH)); } else if (dat.exists == 0 || dat.x != (x / CHUNK_LENGTH) || - dat.y != (y / CHUNK_LENGTH) || dat.z != (z / CHUNK_LENGTH)) { + dat.y != (y / CHUNK_LENGTH) || dat.z != (z / CHUNK_LENGTH)) { dat = gen_chunk((x / CHUNK_LENGTH), (y / CHUNK_LENGTH), (z / CHUNK_LENGTH), ci, dat.exists); prevExists = dat.exists; @@ -153,7 +153,22 @@ int gen_cube(int x, int y, int z, struct chunk dat, int ci, int val) { if (val != -1) { *h = val; - cubes_refresh(x / CHUNK_LENGTH, y / CHUNK_LENGTH, z / CHUNK_LENGTH, dat); + + cubes_refresh(x / CHUNK_LENGTH, y / CHUNK_LENGTH, z / CHUNK_LENGTH, dat, 0); + for (int a = x - 1; a <= x + 1; a++) { + for (int b = y - 1; b <= y + 1; b++) { + for (int c = z - 1; c <= z + 1; c++) { + if (a / CHUNK_LENGTH == x / CHUNK_LENGTH && + b / CHUNK_LENGTH == y / CHUNK_LENGTH && + c / CHUNK_LENGTH == z / CHUNK_LENGTH) + continue; + printf("%i %i %i\n",a,b,c); + + cubes_refresh(a / CHUNK_LENGTH, b / CHUNK_LENGTH, c / CHUNK_LENGTH, + dat, 255); + } + } + } } return *h;