From 39a44adcfa0d4d1e95610a590991e334b334feda Mon Sep 17 00:00:00 2001 From: chelsea Date: Tue, 2 Dec 2025 21:56:51 -0600 Subject: [PATCH] Route cabin paths using trail network --- worldgen-c/bin/worldgen | Bin 135992 -> 135992 bytes worldgen-c/src/worldgen.c | 41 ++++++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/worldgen-c/bin/worldgen b/worldgen-c/bin/worldgen index 6deca1492e794e066f899b169c9f4608272c5987..7cb76f4274c9864fd62d8b67ad47273da9b72712 100755 GIT binary patch delta 12099 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 diff --git a/worldgen-c/src/worldgen.c b/worldgen-c/src/worldgen.c index 39fca6e..a75a135 100644 --- a/worldgen-c/src/worldgen.c +++ b/worldgen-c/src/worldgen.c @@ -1947,6 +1947,32 @@ static int find_nearest_trail_block(column_data columns[CHUNK_SIZE][CHUNK_SIZE], return 0; } +static int find_nearest_trail_point_from_segments(worldgen_ctx *ctx, int start_x, int start_z, int *out_x, int *out_z) { + if (!ctx || ctx->trail_segment_count == 0) return 0; + double best = DBL_MAX; + int bx = 0, bz = 0; + for (size_t i = 0; i < ctx->trail_segment_count; ++i) { + trail_segment *seg = &ctx->trail_segments[i]; + if (!seg || seg->count < 1 || !seg->points) continue; + for (int p = 0; p < seg->count; ++p) { + int tx = seg->points[p * 2]; + int tz = seg->points[p * 2 + 1]; + double dx = (double)(tx - start_x); + double dz = (double)(tz - start_z); + double d2 = dx * dx + dz * dz; + if (d2 < best) { + best = d2; + bx = tx; + bz = tz; + } + } + } + if (best == DBL_MAX) return 0; + *out_x = bx; + *out_z = bz; + return 1; +} + static void connect_cabin_to_trail(worldgen_ctx *ctx, int chunk_x, int chunk_z, column_data columns[CHUNK_SIZE][CHUNK_SIZE], chunk_data *chunk, int door_x, int door_z, int door_side, int path_width) { @@ -1954,13 +1980,20 @@ static void connect_cabin_to_trail(worldgen_ctx *ctx, int chunk_x, int chunk_z, int step_z = (door_side == 0) ? -1 : (door_side == 1) ? 1 : 0; int start_x = door_x + step_x; int start_z = door_z + step_z; - int spur_len = 20; + int spur_len = 24; if (path_width < 2) path_width = 2; carve_cabin_path(ctx, chunk_x, chunk_z, chunk, columns, start_x, start_z, step_x, step_z, spur_len, path_width); int target_x = 0, target_z = 0; - if (!find_nearest_trail_block(columns, chunk, chunk_x, chunk_z, start_x, start_z, 96, &target_x, &target_z)) { - int fallback_x = start_x + step_x * 64; - int fallback_z = start_z + step_z * 64; + int found = 0; + if (ctx && ctx->enable_trails) { + found = find_nearest_trail_point_from_segments(ctx, start_x, start_z, &target_x, &target_z); + } + if (!found) { + found = find_nearest_trail_block(columns, chunk, chunk_x, chunk_z, start_x, start_z, 128, &target_x, &target_z); + } + if (!found) { + int fallback_x = start_x + step_x * 80; + int fallback_z = start_z + step_z * 80; carve_trail_span(ctx, chunk_x, chunk_z, chunk, columns, start_x, start_z, fallback_x, fallback_z, path_width); return; }