Changeset - r23417:4615b1310164
[Not reviewed]
master
0 4 0
Peter Nelson - 5 years ago 2019-02-14 23:12:26
peter1138@openttd.org
Change: Add configurable curve penalty for ships.
4 files changed with 39 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/pathfinder/yapf/yapf_ship.cpp
Show inline comments
 
@@ -169,6 +169,21 @@ protected:
 
	}
 

	
 
public:
 
	inline int CurveCost(Trackdir td1, Trackdir td2)
 
	{
 
		assert(IsValidTrackdir(td1));
 
		assert(IsValidTrackdir(td2));
 

	
 
		if (HasTrackdir(TrackdirCrossesTrackdirs(td1), td2)) {
 
			/* 90-deg curve penalty */
 
			return Yapf().PfGetSettings().ship_curve90_penalty;
 
		} else if (td2 != NextTrackdir(td1)) {
 
			/* 45-deg curve penalty */
 
			return Yapf().PfGetSettings().ship_curve45_penalty;
 
		}
 
		return 0;
 
	}
 

	
 
	/**
 
	 * Called by YAPF to calculate the cost from the origin to the given node.
 
	 *  Calculates only the cost of given node, adds it to the parent node cost
 
@@ -179,10 +194,7 @@ public:
 
		/* base tile cost depending on distance */
 
		int c = IsDiagonalTrackdir(n.GetTrackdir()) ? YAPF_TILE_LENGTH : YAPF_TILE_CORNER_LENGTH;
 
		/* additional penalty for curves */
 
		if (n.GetTrackdir() != NextTrackdir(n.m_parent->GetTrackdir())) {
 
			/* new trackdir does not match the next one when going straight */
 
			c += YAPF_TILE_LENGTH;
 
		}
 
		c += CurveCost(n.m_parent->GetTrackdir(), n.GetTrackdir());
 

	
 
		/* Skipped tile cost for aqueducts. */
 
		c += YAPF_TILE_LENGTH * tf->m_tiles_skipped;
src/saveload/saveload.h
Show inline comments
 
@@ -292,6 +292,7 @@ enum SaveLoadVersion : uint16 {
 
	SLV_SHIPS_STOP_IN_LOCKS,                ///< 206  PR#7150 Ship/lock movement changes.
 
	SLV_FIX_CARGO_MONITOR,                  ///< 207  PR#7175 v1.9  Cargo monitor data packing fix to support 64 cargotypes.
 
	SLV_TOWN_CARGOGEN,                      ///< 208  PR#6965 New algorithms for town building cargo generation.
 
	SLV_SHIP_CURVE_PENALTY,                 ///< 209  PR#7289 Configurable ship curve penalties.
 

	
 
	SL_MAX_VERSION,                         ///< Highest possible saveload version
 
};
src/settings_type.h
Show inline comments
 
@@ -418,6 +418,8 @@ struct YAPFSettings {
 
	uint32 rail_longer_platform_per_tile_penalty;  ///< penalty for longer  station platform than train (per tile)
 
	uint32 rail_shorter_platform_penalty;          ///< penalty for shorter station platform than train
 
	uint32 rail_shorter_platform_per_tile_penalty; ///< penalty for shorter station platform than train (per tile)
 
	uint32 ship_curve45_penalty;                   ///< penalty for 45-deg curve for ships
 
	uint32 ship_curve90_penalty;                   ///< penalty for 90-deg curve for ships
 
};
 

	
 
/** Settings related to all pathfinders. */
src/table/settings.ini
Show inline comments
 
@@ -2163,6 +2163,26 @@ min      = 0
 
max      = 1000000
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = pf.yapf.ship_curve45_penalty
 
type     = SLE_UINT
 
from     = SLV_SHIP_CURVE_PENALTY
 
def      = 1 * YAPF_TILE_LENGTH
 
min      = 0
 
max      = 1000000
 
cat      = SC_EXPERT
 

	
 
[SDT_VAR]
 
base     = GameSettings
 
var      = pf.yapf.ship_curve90_penalty
 
type     = SLE_UINT
 
from     = SLV_SHIP_CURVE_PENALTY
 
def      = 6 * YAPF_TILE_LENGTH
 
min      = 0
 
max      = 1000000
 
cat      = SC_EXPERT
 

	
 
##
 
[SDT_VAR]
 
base     = GameSettings
0 comments (0 inline, 0 general)