summaryrefslogtreecommitdiff
path: root/src/train_cmd.cpp
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2008-01-09 23:00:59 +0000
committersmatz <smatz@openttd.org>2008-01-09 23:00:59 +0000
commitf44a9a5d5b468496fe92473e3bbd6a556efabf12 (patch)
tree3de62d8fa49bd51c2036af4c35d3e035e59db6ea /src/train_cmd.cpp
parent6c954cad5f73f20fad3804d16f1852c7b52d3ad7 (diff)
downloadopenttd-f44a9a5d5b468496fe92473e3bbd6a556efabf12.tar.xz
(svn r11802) -Fix [FS#716]: do not crash trains when leaving depot to a very long track
-Codechange: use dedicated pathfinder for signal updating, resulting in better performance and possible future improvements
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r--src/train_cmd.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 190bf5ae2..4ae2ddca6 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -43,6 +43,7 @@
#include "date_func.h"
#include "vehicle_func.h"
#include "sound_func.h"
+#include "signal_func.h"
#include "variables.h"
#include "autoreplace_gui.h"
#include "gfx_func.h"
@@ -2156,7 +2157,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
v->load_unload_time_rem = 0;
- if (UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction))) {
+ if (UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR)) {
InvalidateWindowClasses(WC_TRAINS_LIST);
return true;
}
@@ -2175,7 +2176,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
v->UpdateDeltaXY(v->direction);
v->cur_image = v->GetImage(v->direction);
VehiclePositionChanged(v);
- UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction));
+ UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR);
UpdateTrainAcceleration(v);
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
@@ -3114,7 +3115,7 @@ static void DeleteLastWagon(Vehicle *v)
delete v;
if (v->u.rail.track != TRACK_BIT_DEPOT && v->u.rail.track != TRACK_BIT_WORMHOLE)
- SetSignalsOnBothDir(v->tile, FIND_FIRST_BIT(v->u.rail.track));
+ SetSignalsOnBothDir(v->tile, (Track)(FIND_FIRST_BIT(v->u.rail.track)));
/* Check if the wagon was on a road/rail-crossing and disable it if no
* others are on it */
@@ -3125,11 +3126,8 @@ static void DeleteLastWagon(Vehicle *v)
if (GetVehicleTunnelBridge(v->tile, endtile) != NULL) return; // tunnel / bridge is busy
- DiagDirection dir = GetTunnelBridgeDirection(v->tile);
-
/* v->direction is "random", so it cannot be used to determine the direction of the track */
- UpdateSignalsOnSegment(v->tile, dir);
- UpdateSignalsOnSegment(endtile, ReverseDiagDir(dir));
+ UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR);
}
}