From 561eec5afe56610eb116c5996bce4e9bb02e9378 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Mon, 8 Apr 2024 18:39:44 +0200 Subject: [PATCH] Add a penalty when getting on and off a train Fixes #7. --- src/dijkstragraph.c | 5 +---- src/dijkstrasearch.c | 5 +++++ src/dijkstrasearch.h | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/dijkstragraph.c b/src/dijkstragraph.c index e0748f5..e1ad2c0 100644 --- a/src/dijkstragraph.c +++ b/src/dijkstragraph.c @@ -180,10 +180,7 @@ dijkstra_cost dijkstra_get_weight_from_distance(struct dijkstra_node *node_a, switch (net_type) { case TRAINLINE: - scale = 5.0; - break; - case ACCESS: - scale = 0.5; + scale = 10.0; break; default: scale = 1.0; diff --git a/src/dijkstrasearch.c b/src/dijkstrasearch.c index 322e8b9..1e74ef3 100644 --- a/src/dijkstrasearch.c +++ b/src/dijkstrasearch.c @@ -112,6 +112,11 @@ struct dijkstra_node *dijkstra_search_process_queue(struct dijkstra_search *sear for (l = node->paths; l != NULL; l = l->next) { path = (struct dijkstra_path*) l->data; cost = state->cost + path->weight; + if (state->cheapest_path && path->net_meta->type == ACCESS) { // If we just jumped onto an access path + if (state->cheapest_path->net_meta->type != ACCESS) {// and we came from a non-access path (getting on or off) + cost += (DIJKSTRA_ACCESS_PENALTY * 100.0); // add a penalty + } + } connection = dijkstra_node_get_connection(node, path); diff --git a/src/dijkstrasearch.h b/src/dijkstrasearch.h index 576f7f5..30beb3c 100644 --- a/src/dijkstrasearch.h +++ b/src/dijkstrasearch.h @@ -5,6 +5,8 @@ #define DIJKSTRA_SEARCH_MAX_ITERATIONS 5000 +#define DIJKSTRA_ACCESS_PENALTY 300.0 + struct dijkstra_state { struct dijkstra_path *cheapest_path; dijkstra_cost cost;