antizona

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 9e168f53175fd11c3b955e0b8cfa92e00b5ee5f7
parent 41c106971b3219fe98814aacbc76e04f5077f38e
Author: averagecoder <averagecoder@noreply.codeberg.org>
Date:   Mon, 24 Aug 2026 20:08:58 +0300

fix: 5-points legs collision

Diffstat:
Msrc/render.c | 25++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/render.c b/src/render.c @@ -1233,9 +1233,16 @@ get_ground_height(float px, float pz, float cur_y) { const struct col_cell *c; const struct col_triangle *t; - float best_below, hit_y, min_x, max_x, min_z, max_z; + float best_below, hit_y, min_x, max_x, min_z, max_z, sx, sz; uint32_t i; - int gx, gz; + int gx, gz, k; + static const float offsets[5][2] = { + { 0.0f, 0.0f }, + { 0.18f, 0.0f }, + {-0.18f, 0.0f }, + { 0.0f, 0.18f }, + { 0.0f, -0.18f } + }; gx = (int)((px - MAP_MIN) / ((MAP_MAX - MAP_MIN) / GRID_SZ)); gz = (int)((pz - MAP_MIN) / ((MAP_MAX - MAP_MIN) / GRID_SZ)); @@ -1254,19 +1261,23 @@ get_ground_height(float px, float pz, float cur_y) min_x = fminf(t->v0[0], fminf(t->v1[0], t->v2[0])); max_x = fmaxf(t->v0[0], fmaxf(t->v1[0], t->v2[0])); - if (px < min_x || px > max_x) { + if (px + 0.20f < min_x || px - 0.20f > max_x) { continue; } min_z = fminf(t->v0[2], fminf(t->v1[2], t->v2[2])); max_z = fmaxf(t->v0[2], fmaxf(t->v1[2], t->v2[2])); - if (pz < min_z || pz > max_z) { + if (pz + 0.20f < min_z || pz - 0.20f > max_z) { continue; } - if (ray_tri_intersect_y(t, px, pz, &hit_y)) { - if (hit_y <= cur_y + 0.50f && hit_y > best_below) { - best_below = hit_y; + for (k = 0; k < 5; k++) { + sx = px + offsets[k][0]; + sz = pz + offsets[k][1]; + if (ray_tri_intersect_y(t, sx, sz, &hit_y)) { + if (hit_y <= cur_y + 0.60f && hit_y > best_below) { + best_below = hit_y; + } } } }