vehicle.c
changeset 1758 68668114f92e
parent 1757 b179d50241dc
child 1765 f8d29d5462c9
--- a/vehicle.c	Tue May 03 19:31:33 2005 +0000
+++ b/vehicle.c	Tue May 03 20:45:23 2005 +0000
@@ -17,6 +17,8 @@
 #include "debug.h"
 #include "npf.h"
 #include "vehicle_gui.h"
+#include "depot.h"
+#include "station.h"
 
 #define INVALID_COORD (-0x8000)
 #define GEN_HASH(x,y) (((x & 0x1F80)>>7) + ((y & 0xFC0)))
@@ -1714,11 +1716,15 @@
 
 byte GetVehicleTrackdir(const Vehicle* v)
 {
+	if (v->vehstatus & VS_CRASHED)
+		return 0xff;
+
 	switch(v->type)
 	{
 		case VEH_Train:
 			if (v->u.rail.track == 0x80)
-				return 0xFF; /* Train in depot */
+				/* We'll assume the train is facing outwards */
+				return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_RAIL)]; /* Train in depot */
 			else if (v->u.rail.track == 0x40)
 				/* train in tunnel, so just use his direction and assume a diagonal track */
 				return _dir_to_diag_trackdir[(v->direction>>1)&3];
@@ -1726,12 +1732,17 @@
 				return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.rail.track)][v->direction];
 		case VEH_Ship:
 			if (v->u.ship.state == 0x80)
-				return 0xFF; /* Ship in depot */
+				/* We'll assume the ship is facing outwards */
+				return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_WATER)]; /* Ship in depot */
 			else
 				return _track_direction_to_trackdir[FIND_FIRST_BIT(v->u.ship.state)][v->direction];
 		case VEH_Road:
 			if (v->u.road.state == 254)
-				return 0xFF; /* Road vehicle in depot */
+				/* We'll assume the road vehicle is facing outwards */
+				return _dir_to_diag_trackdir[GetDepotDirection(v->tile, TRANSPORT_ROAD)]; /* Road vehicle in depot */
+			else if (IsRoadStationTile(v->tile))
+				/* We'll assume the road vehicle is facing outwards */
+				return _dir_to_diag_trackdir[GetRoadStationDir(v->tile)]; /* Road vehicle in a station */
 			else
 				return _dir_to_diag_trackdir[(v->direction>>1)&3];
 		case VEH_Aircraft: