mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-11 13:10:45 +00:00
(svn r27912) -Fix (r13948): [NPF] Reserved track bits were not accounted for when trying to find any safe position.
This commit is contained in:
parent
6d1effd3c9
commit
6f98cde882
@ -961,7 +961,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current)
|
||||
* multiple targets that are spread around, we should perform a breadth first
|
||||
* search by specifiying CalcZero as our heuristic.
|
||||
*/
|
||||
static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty)
|
||||
static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty, bool ignore_reserved = false)
|
||||
{
|
||||
int r;
|
||||
NPFFoundTargetData result;
|
||||
@ -982,12 +982,14 @@ static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start
|
||||
start1->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR;
|
||||
start1->user_data[NPF_NODE_FLAGS] = 0;
|
||||
NPFSetFlag(start1, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile1);
|
||||
NPFSetFlag(start1, NPF_FLAG_IGNORE_RESERVED, ignore_reserved);
|
||||
_npf_aystar.AddStartNode(start1, 0);
|
||||
if (start2 != NULL) {
|
||||
start2->user_data[NPF_TRACKDIR_CHOICE] = INVALID_TRACKDIR;
|
||||
start2->user_data[NPF_NODE_FLAGS] = 0;
|
||||
NPFSetFlag(start2, NPF_FLAG_IGNORE_START_TILE, ignore_start_tile2);
|
||||
NPFSetFlag(start2, NPF_FLAG_REVERSE, true);
|
||||
NPFSetFlag(start2, NPF_FLAG_IGNORE_RESERVED, ignore_reserved);
|
||||
_npf_aystar.AddStartNode(start2, reverse_penalty);
|
||||
}
|
||||
|
||||
@ -1226,14 +1228,6 @@ bool NPFTrainFindNearestSafeTile(const Train *v, TileIndex tile, Trackdir trackd
|
||||
AyStarNode start1;
|
||||
start1.tile = tile;
|
||||
start1.direction = trackdir;
|
||||
/* FIXME: NPFRouteInternal is wiping out any flags on startup, also the
|
||||
* NPF_FLAG_IGNORE_RESERVED flag that was intended to be set on this line.
|
||||
* The flag was never set properly, since introdued in r13948. Now the line
|
||||
* is commented out to silence compiler warnings (using uninitialized 'flags').
|
||||
* Currently the NPF_FLAG_IGNORE_RESERVED is nowhere used. It has to be
|
||||
* decided what to do with this flag.
|
||||
*
|
||||
* NPFSetFlag(&start1, NPF_FLAG_IGNORE_RESERVED, true); */
|
||||
|
||||
RailTypes railtypes = v->compatible_railtypes;
|
||||
if (override_railtype) railtypes |= GetRailTypeInfo(v->railtype)->compatible_railtypes;
|
||||
@ -1241,7 +1235,7 @@ bool NPFTrainFindNearestSafeTile(const Train *v, TileIndex tile, Trackdir trackd
|
||||
/* perform a breadth first search. Target is NULL,
|
||||
* since we are just looking for any safe tile...*/
|
||||
AyStarUserData user = { v->owner, TRANSPORT_RAIL, railtypes, ROADTYPES_NONE };
|
||||
return NPFRouteInternal(&start1, true, NULL, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0).res_okay;
|
||||
return NPFRouteInternal(&start1, true, NULL, false, &fstd, NPFFindSafeTile, NPFCalcZero, &user, 0, true).res_okay;
|
||||
}
|
||||
|
||||
bool NPFTrainCheckReverse(const Train *v)
|
||||
|
Loading…
Reference in New Issue
Block a user