diff options
author | hackykid <hackykid@openttd.org> | 2005-07-22 08:40:19 +0000 |
---|---|---|
committer | hackykid <hackykid@openttd.org> | 2005-07-22 08:40:19 +0000 |
commit | aa29ee6eda861ceac08d226a6d7e1de5dae74749 (patch) | |
tree | a3caf79bf281e825af72f9b3c43114b86409cb9a | |
parent | 559babcdc96d5e2de5e964c9d9b6109e4cfbcffc (diff) | |
download | openttd-aa29ee6eda861ceac08d226a6d7e1de5dae74749.tar.xz |
(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.
-rw-r--r-- | npf.c | 2 | ||||
-rw-r--r-- | pbs.c | 6 | ||||
-rw-r--r-- | pbs.h | 11 | ||||
-rw-r--r-- | train_cmd.c | 4 |
4 files changed, 12 insertions, 11 deletions
@@ -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); } @@ -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; @@ -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 diff --git a/train_cmd.c b/train_cmd.c index 471d15e59..f7ec9579f 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -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; |