(svn r2674) - CodeChange: [pbs] Generalise the PSBISPbsDepot function so it can check if an arbitrary junction is a pbs junction. Preparations for making pbs more safe.

This commit is contained in:
hackykid 2005-07-22 08:40:19 +00:00
parent 559babcdc9
commit aa29ee6eda
4 changed files with 12 additions and 11 deletions

2
npf.c
View File

@ -525,7 +525,7 @@ static int32 NPFRailPathCost(AyStar* as, AyStarNode* current, OpenListNode* pare
if (NPFGetFlag(current, NPF_FLAG_PBS_BLOCKED)) {
cost += 1000;
}
if (PBSIsPbsDepot(tile)) {
if (PBSIsPbsSegment(tile, ReverseTrackdir(trackdir))) {
NPFSetFlag(current, NPF_FLAG_PBS_EXIT, true);
NPFSetFlag(current, NPF_FLAG_SEEN_SIGNAL, true);
}

6
pbs.c
View File

@ -269,11 +269,11 @@ static bool SetSignalsEnumProcPBS(uint tile, SetSignalsDataPbs *ssd, int trackdi
return false;
}
bool PBSIsPbsDepot(uint tile)
bool PBSIsPbsSegment(uint tile, Trackdir trackdir)
{
SetSignalsDataPbs ssd;
bool result = false;
DiagDirection direction = GetDepotDirection(tile,TRANSPORT_RAIL);
bool result = PBSIsPbsSignal(tile, trackdir);
DiagDirection direction = TrackdirToExitdir(trackdir);//GetDepotDirection(tile,TRANSPORT_RAIL);
int i;
ssd.cur = 0;

11
pbs.h
View File

@ -72,12 +72,13 @@ bool PBSIsPbsSignal(TileIndex tile, Trackdir trackdir);
* @return True when there are pbs signals on that tile
*/
bool PBSIsPbsDepot(uint tile);
bool PBSIsPbsSegment(uint tile, Trackdir trackdir);
/**<
* Checks if a depot is inside a pbs block.
* Tis means that the block it is in needs to have at least 1 signal, and that all signals in it need to be pbs signals.
* @param tile The depot tile to check
* @return True when the depot is inside a pbs block.
* Checks if a signal/depot leads to a pbs block.
* This means that the block needs to have at least 1 signal, and that all signals in it need to be pbs signals.
* @param tile The tile to check
* @param trackdir The direction in which to check
* @return True when the depot is inside a pbs block
*/
#endif

View File

@ -1801,6 +1801,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
return false;
if (v->u.rail.force_proceed == 0) {
byte trackdir = GetVehicleTrackdir(v);
if (++v->load_unload_time_rem < 37) {
InvalidateWindowClasses(WC_TRAINS_LIST);
return true;
@ -1808,8 +1809,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
v->load_unload_time_rem = 0;
if (PBSIsPbsDepot(v->tile)) {
byte trackdir = GetVehicleTrackdir(v);
if (PBSIsPbsSegment(v->tile, trackdir)) {
NPFFindStationOrTileData fstd;
NPFFoundTargetData ftd;