summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--npf.c5
-rw-r--r--settings.c3
-rw-r--r--variables.h12
3 files changed, 18 insertions, 2 deletions
diff --git a/npf.c b/npf.c
index c7bfb0c68..63f43ecfd 100644
--- a/npf.c
+++ b/npf.c
@@ -785,7 +785,10 @@ void InitializeNPF(void)
init_AyStar(&_npf_aystar, NPFHash, NPF_HASH_SIZE);
_npf_aystar.loops_per_tick = 0;
_npf_aystar.max_path_cost = 0;
- _npf_aystar.max_search_nodes = 0;
+ //_npf_aystar.max_search_nodes = 0;
+ /* We will limit the number of nodes for now, until we have a better
+ * solution to really fix performance */
+ _npf_aystar.max_search_nodes = _patches.npf_max_search_nodes;
#if 0
init_AyStar(&_train_find_station, NTPHash, 1024);
init_AyStar(&_train_find_depot, NTPHash, 1024);
diff --git a/settings.c b/settings.c
index 02085cb96..0c285a2c0 100644
--- a/settings.c
+++ b/settings.c
@@ -926,6 +926,9 @@ const SettingDesc patch_settings[] = {
/* New Path Finding */
{"new_pathfinding_all", SDT_BOOL, (void*)false, &_patches.new_pathfinding_all, NULL},
+ /* The maximum number of nodes to search */
+ {"npf_max_search_nodes", SDT_UINT32, (void*)10000, &_patches.npf_max_search_nodes, NULL},
+
/* When a red signal is encountered, a small detour can be made around
* it. This specifically occurs when a track is doubled, in which case
* the detour is typically 2 tiles. It is also often used at station
diff --git a/variables.h b/variables.h
index 32432f28d..5a705214f 100644
--- a/variables.h
+++ b/variables.h
@@ -192,9 +192,19 @@ typedef struct Patches {
byte drag_signals_density; // many signals density
bool ainew_active; // Is the new AI active?
- /* New Path Finding */
+ /*
+ * New Path Finding
+ */
bool new_pathfinding_all; /* Use the newest pathfinding algorithm for all */
+ /**
+ * The maximum amount of search nodes a single NPF run should take. This
+ * limit should make sure performance stays at acceptable levels at the cost
+ * of not being perfect anymore. This will probably be fixed in a more
+ * sophisticated way sometime soon
+ */
+ uint32 npf_max_search_nodes;
+
uint32 npf_rail_firstred_penalty; /* The penalty for when the first signal is red (and it is not an exit or combo signal) */
uint32 npf_rail_firstred_exit_penalty; /* The penalty for when the first signal is red (and it is an exit or combo signal) */
uint32 npf_rail_lastred_penalty; /* The penalty for when the last signal is red */