mirror of https://github.com/OpenTTD/OpenTTD
(svn r27844) -Change: (Yapf) Treat max cost exceeded separately from path too long condition, as destination should not be considered in the former case.
parent
39fa3c7cbd
commit
9bc27c9a72
|
@ -479,7 +479,7 @@ no_entry_cost: // jump here at the beginning if the node has no parent (it is th
|
||||||
/* Finish if we already exceeded the maximum path cost (i.e. when
|
/* Finish if we already exceeded the maximum path cost (i.e. when
|
||||||
* searching for the nearest depot). */
|
* searching for the nearest depot). */
|
||||||
if (m_max_cost > 0 && (parent_cost + segment_entry_cost + segment_cost) > m_max_cost) {
|
if (m_max_cost > 0 && (parent_cost + segment_entry_cost + segment_cost) > m_max_cost) {
|
||||||
end_segment_reason |= ESRB_PATH_TOO_LONG;
|
end_segment_reason |= ESRB_MAX_COST_EXCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move to the next tile/trackdir. */
|
/* Move to the next tile/trackdir. */
|
||||||
|
@ -555,6 +555,9 @@ no_entry_cost: // jump here at the beginning if the node has no parent (it is th
|
||||||
|
|
||||||
} // for (;;)
|
} // for (;;)
|
||||||
|
|
||||||
|
/* Don't consider path any further it if exceeded max_cost. */
|
||||||
|
if (end_segment_reason & ESRB_MAX_COST_EXCEEDED) return false;
|
||||||
|
|
||||||
bool target_seen = false;
|
bool target_seen = false;
|
||||||
if ((end_segment_reason & ESRB_POSSIBLE_TARGET) != ESRB_NONE) {
|
if ((end_segment_reason & ESRB_POSSIBLE_TARGET) != ESRB_NONE) {
|
||||||
/* Depot, station or waypoint. */
|
/* Depot, station or waypoint. */
|
||||||
|
|
|
@ -19,6 +19,7 @@ enum EndSegmentReason {
|
||||||
ESR_RAIL_TYPE, ///< the next tile has a different rail type than our tiles
|
ESR_RAIL_TYPE, ///< the next tile has a different rail type than our tiles
|
||||||
ESR_INFINITE_LOOP, ///< infinite loop detected
|
ESR_INFINITE_LOOP, ///< infinite loop detected
|
||||||
ESR_SEGMENT_TOO_LONG, ///< the segment is too long (possible infinite loop)
|
ESR_SEGMENT_TOO_LONG, ///< the segment is too long (possible infinite loop)
|
||||||
|
ESR_MAX_COST_EXCEEDED, ///< maximum cost is exceeded
|
||||||
ESR_CHOICE_FOLLOWS, ///< the next tile contains a choice (the track splits to more than one segments)
|
ESR_CHOICE_FOLLOWS, ///< the next tile contains a choice (the track splits to more than one segments)
|
||||||
ESR_DEPOT, ///< stop in the depot (could be a target next time)
|
ESR_DEPOT, ///< stop in the depot (could be a target next time)
|
||||||
ESR_WAYPOINT, ///< waypoint encountered (could be a target next time)
|
ESR_WAYPOINT, ///< waypoint encountered (could be a target next time)
|
||||||
|
@ -43,6 +44,7 @@ enum EndSegmentReasonBits {
|
||||||
ESRB_RAIL_TYPE = 1 << ESR_RAIL_TYPE,
|
ESRB_RAIL_TYPE = 1 << ESR_RAIL_TYPE,
|
||||||
ESRB_INFINITE_LOOP = 1 << ESR_INFINITE_LOOP,
|
ESRB_INFINITE_LOOP = 1 << ESR_INFINITE_LOOP,
|
||||||
ESRB_SEGMENT_TOO_LONG = 1 << ESR_SEGMENT_TOO_LONG,
|
ESRB_SEGMENT_TOO_LONG = 1 << ESR_SEGMENT_TOO_LONG,
|
||||||
|
ESRB_MAX_COST_EXCEEDED = 1 << ESR_MAX_COST_EXCEEDED,
|
||||||
ESRB_CHOICE_FOLLOWS = 1 << ESR_CHOICE_FOLLOWS,
|
ESRB_CHOICE_FOLLOWS = 1 << ESR_CHOICE_FOLLOWS,
|
||||||
ESRB_DEPOT = 1 << ESR_DEPOT,
|
ESRB_DEPOT = 1 << ESR_DEPOT,
|
||||||
ESRB_WAYPOINT = 1 << ESR_WAYPOINT,
|
ESRB_WAYPOINT = 1 << ESR_WAYPOINT,
|
||||||
|
@ -63,7 +65,7 @@ enum EndSegmentReasonBits {
|
||||||
ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
|
ESRB_CACHED_MASK = ESRB_DEAD_END | ESRB_RAIL_TYPE | ESRB_INFINITE_LOOP | ESRB_SEGMENT_TOO_LONG | ESRB_CHOICE_FOLLOWS | ESRB_DEPOT | ESRB_WAYPOINT | ESRB_STATION | ESRB_SAFE_TILE,
|
||||||
|
|
||||||
/* Reasons to abort pathfinding in this direction. */
|
/* Reasons to abort pathfinding in this direction. */
|
||||||
ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
|
ESRB_ABORT_PF_MASK = ESRB_DEAD_END | ESRB_PATH_TOO_LONG | ESRB_MAX_COST_EXCEEDED | ESRB_INFINITE_LOOP | ESRB_FIRST_TWO_WAY_RED,
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits)
|
DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits)
|
||||||
|
@ -71,7 +73,7 @@ DECLARE_ENUM_AS_BIT_SET(EndSegmentReasonBits)
|
||||||
inline CStrA ValueStr(EndSegmentReasonBits bits)
|
inline CStrA ValueStr(EndSegmentReasonBits bits)
|
||||||
{
|
{
|
||||||
static const char * const end_segment_reason_names[] = {
|
static const char * const end_segment_reason_names[] = {
|
||||||
"DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "CHOICE_FOLLOWS",
|
"DEAD_END", "RAIL_TYPE", "INFINITE_LOOP", "SEGMENT_TOO_LONG", "MAX_COST_EXCEEDED", "CHOICE_FOLLOWS",
|
||||||
"DEPOT", "WAYPOINT", "STATION", "SAFE_TILE",
|
"DEPOT", "WAYPOINT", "STATION", "SAFE_TILE",
|
||||||
"PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
|
"PATH_TOO_LONG", "FIRST_TWO_WAY_RED", "LOOK_AHEAD_END", "TARGET_REACHED"
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue