changeset 3981:4920349e8a31 draft

(svn r5169) - CodeChange: [YAPF] RVs now use YAPF_TILE_LENGTH as base unit and 2 configurable settings (slope and crossing penalties) for cost calculation
author KUDr <KUDr@openttd.org>
date Thu, 08 Jun 2006 17:31:03 +0000
parents 36043cc5d610
children a2ac0bbfc380
files settings.c yapf/yapf_road.cpp yapf/yapf_settings.h
diffstat 3 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/settings.c
+++ b/settings.c
@@ -1412,6 +1412,9 @@
 	SDT_CONDVAR (Patches, yapf.rail_longer_platform_per_tile_penalty,  SLE_UINT, 28, SL_MAX_VERSION,NS, 0,   0 * YAPF_TILE_LENGTH,        0,   20000, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_shorter_platform_penalty,          SLE_UINT, 28, SL_MAX_VERSION,NS, 0,  40 * YAPF_TILE_LENGTH,        0,   20000, STR_NULL, NULL),
 	SDT_CONDVAR (Patches, yapf.rail_shorter_platform_per_tile_penalty, SLE_UINT, 28, SL_MAX_VERSION,NS, 0,   0 * YAPF_TILE_LENGTH,        0,   20000, STR_NULL, NULL),
+	// road vehicles - penalties
+	SDT_CONDVAR (Patches, yapf.road_slope_penalty                    , SLE_UINT, 28, SL_MAX_VERSION,NS, 0,   2 * YAPF_TILE_LENGTH,        0, 1000000, STR_NULL, NULL),
+	SDT_CONDVAR (Patches, yapf.rail_crossing_penalty                 , SLE_UINT, 28, SL_MAX_VERSION,NS, 0,   3 * YAPF_TILE_LENGTH,        0, 1000000, STR_NULL, NULL),
 
 	SDT_END()
 };
--- a/yapf/yapf_road.cpp
+++ b/yapf/yapf_road.cpp
@@ -33,7 +33,7 @@
 
 		if (z2 - z1 > 1) {
 			/* Slope up */
-			return Yapf().PfGetSettings().rail_slope_penalty;
+			return Yapf().PfGetSettings().road_slope_penalty;
 		}
 		return 0;
 	}
@@ -44,12 +44,12 @@
 		int cost = 0;
 		// set base cost
 		if (IsDiagonalTrackdir(trackdir)) {
-			cost += 10;
+			cost += YAPF_TILE_LENGTH;
 			switch (GetTileType(tile)) {
 				case MP_STREET:
 					/* Increase the cost for level crossings */
 					if (IsLevelCrossing(tile))
-						cost += Yapf().PfGetSettings().rail_crossing_penalty;
+						cost += Yapf().PfGetSettings().road_crossing_penalty;
 					break;
 
 				default:
@@ -57,7 +57,7 @@
 			}
 		} else {
 			// non-diagonal trackdir
-			cost = 7;
+			cost = YAPF_TILE_CORNER_LENGTH;
 		}
 		return cost;
 	}
@@ -95,7 +95,7 @@
 			if (F.m_new_tile == n.m_key.m_tile && new_td == n.m_key.m_td) return false;
 
 			// if we skipped some tunnel tiles, add their cost
-			segment_cost += 10 * F.m_tiles_skipped;
+			segment_cost += F.m_tiles_skipped * YAPF_TILE_LENGTH;
 
 			// add hilly terrain penalty
 			segment_cost += Yapf().SlopeCost(tile, F.m_new_tile, trackdir);
@@ -206,7 +206,7 @@
 		int dy = abs(y1 - y2);
 		int dmin = min(dx, dy);
 		int dxy = abs(dx - dy);
-		int d = dmin * 7 + (dxy - 1) * 5;
+		int d = dmin * YAPF_TILE_CORNER_LENGTH + (dxy - 1) * (YAPF_TILE_LENGTH / 2);
 		n.m_estimate = n.m_cost + d;
 		assert(n.m_estimate >= n.m_parent->m_estimate);
 		return true;
--- a/yapf/yapf_settings.h
+++ b/yapf/yapf_settings.h
@@ -36,6 +36,8 @@
 	YS_DEF(bool  , ship_use_yapf)              ///< use YAPF for ships
 	YS_DEF(bool  , road_use_yapf)              ///< use YAPF for road
 	YS_DEF(bool  , rail_use_yapf)              ///< use YAPF for rail
+	YS_DEF(uint32, road_slope_penalty)         ///< penalty for up-hill slope
+	YS_DEF(uint32, road_crossing_penalty)      ///< penalty for level crossing
 	YS_DEF(bool  , rail_firstred_twoway_eol)   ///< treat first red two-way signal as dead end
 	YS_DEF(uint32, rail_firstred_penalty)      ///< penalty for first red signal
 	YS_DEF(uint32, rail_firstred_exit_penalty) ///< penalty for first red exit signal