Changeset - r6130:441db4eef51a
[Not reviewed]
master
0 2 0
KUDr - 18 years ago 2007-02-23 21:36:43
kudr@openttd.org
(svn r8867) -Fix(r8866): revert yapf_costrail.hpp commited by mistake, helpers.hpp had wrong line ending
2 files changed with 7 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/helpers.hpp
Show inline comments
 
@@ -72,28 +72,28 @@ template <typename T> static inline T de
 

	
 
/** probably redundant enum combining operators (as we have conversion functions)
 
 *  but the old code is full of such arithmetics */
 
# define DECLARE_ENUM_AS_BIT_INDEX(idx_t, mask_t) \
 
	FORCEINLINE mask_t operator << (int m, idx_t i) {return (mask_t)(m << (int)i);} \
 
	FORCEINLINE mask_t operator << (mask_t m, int i) {return (mask_t)(((int)m) << i);} \
 
	FORCEINLINE mask_t operator >> (mask_t m, int i) {return (mask_t)(((int)m) >> i);}
 

	
 

	
 
/** Informative template class exposing basic enumeration properties used by several
 
 *  other templates below. Here we have only forward declaration. For each enum type
 
 *  we will create specialization derived from MakeEnumPropsT<>.
 
 *  i.e.:
 
 *    template <> struct EnumPropsT<Track> : MakeEnumPropsT<Track, byte, TRACK_BEGIN, TRACK_END, INVALID_TRACK> {};
 
 *  followed by:
 
 *    typedef TinyEnumT<Track> TrackByte;
 
 *  i.e.:
 
 *    template <> struct EnumPropsT<Track> : MakeEnumPropsT<Track, byte, TRACK_BEGIN, TRACK_END, INVALID_TRACK> {};
 
 *  followed by:
 
 *    typedef TinyEnumT<Track> TrackByte;
 
 */
 
template <typename Tenum_t> struct EnumPropsT;
 

	
 
/** Helper template class that makes basic properties of given enumeration type visible
 
 *  from outsize. It is used as base class of several EnumPropsT specializations each
 
 *  dedicated to one of commonly used enumeration types.
 
 *  @param Tenum_t enumeration type that you want to describe
 
 *  @param Tstorage_t what storage type would be sufficient (i.e. byte)
 
 *  @param Tbegin first valid value from the contiguous range (i.e. TRACK_BEGIN)
 
 *  @param Tend one past the last valid value from the contiguous range (i.e. TRACK_END)
 
 *  @param Tinvalid value used as invalid value marker (i.e. INVALID_TRACK)
 
 */
src/yapf/yapf_costrail.hpp
Show inline comments
 
@@ -57,40 +57,40 @@ public:
 
		if (TrackFollower::Allow90degTurns()
 
				&& ((TrackdirToTrackdirBits(td2) & (TrackdirBits)TrackdirCrossesTrackdirs(td1)) != 0)) {
 
			// 90-deg curve penalty
 
			cost += Yapf().PfGetSettings().rail_curve90_penalty;
 
		} else if (td2 != NextTrackdir(td1)) {
 
			// 45-deg curve penalty
 
			cost += Yapf().PfGetSettings().rail_curve45_penalty;
 
		}
 
		return cost;
 
	}
 

	
 
	/** return one tile cost. If tile is a tunnel entry, it is moved to the end of tunnel */
 
	FORCEINLINE int OneTileCost(TileIndex prev_tile, TileIndex& tile, Trackdir trackdir)
 
	FORCEINLINE int OneTileCost(TileIndex& tile, Trackdir trackdir)
 
	{
 
		int cost = 0;
 
		// set base cost
 
		if (IsDiagonalTrackdir(trackdir)) {
 
			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;
 
					break;
 

	
 
				case MP_STATION:
 
					// penalty for passing station tiles
 
					cost += Yapf().PfGetSettings().rail_station_penalty * DistanceManhattan(prev_tile, tile);
 
					cost += Yapf().PfGetSettings().rail_station_penalty;
 
					break;
 

	
 
				default:
 
					break;
 
			}
 
		} else {
 
			// non-diagonal trackdir
 
			cost = YAPF_TILE_CORNER_LENGTH;
 
		}
 
		return cost;
 
	}
 

	
 
@@ -193,25 +193,25 @@ public:
 
		Trackdir  prev_trackdir  = (n.m_parent != NULL) ? n.m_parent->GetLastTrackdir() : INVALID_TRACKDIR;
 
		TileType  prev_tile_type = (n.m_parent != NULL) ? GetTileType(n.m_parent->GetLastTile()) : MP_VOID;
 

	
 
		TileIndex tile = n.m_key.m_tile;
 
		Trackdir trackdir = n.m_key.m_td;
 
		TileType tile_type = GetTileType(tile);
 

	
 
		RailType rail_type = GetTileRailType(tile, TrackdirToTrack(trackdir));
 

	
 
		bool target_seen = Yapf().PfDetectDestination(tile, trackdir);
 

	
 
		while (true) {
 
			segment_cost += Yapf().OneTileCost(prev_tile, tile, trackdir);
 
			segment_cost += Yapf().OneTileCost(tile, trackdir);
 
			segment_cost += Yapf().CurveCost(prev_trackdir, trackdir);
 
			segment_cost += Yapf().SlopeCost(tile, trackdir);
 
			segment_cost += Yapf().SignalCost(n, tile, trackdir);
 
			if (n.m_segment->flags_u.flags_s.m_end_of_line) {
 
				break;
 
			}
 

	
 
			// finish if we have reached the destination
 
			if (target_seen) {
 
				break;
 
			}
 

	
0 comments (0 inline, 0 general)