From 027597f4854de4e9bb8ca21c9763bcd98af1d626 Mon Sep 17 00:00:00 2001
From: KUDr <kudr@openttd.org>
Date: Sun, 29 Apr 2007 09:55:32 +0000
Subject: [PATCH] (svn r9745) -Codechange [YAPF}: if destination is a waypoint
 then YAPF gets destination tile from that waypoint->xy instead of from
 v->dest_tile

---
 src/yapf/yapf_destrail.hpp | 29 +++++++++++++++++++++--------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/yapf/yapf_destrail.hpp b/src/yapf/yapf_destrail.hpp
index 1baa621646..5b44d805cb 100644
--- a/src/yapf/yapf_destrail.hpp
+++ b/src/yapf/yapf_destrail.hpp
@@ -86,14 +86,27 @@ protected:
 public:
 	void SetDestination(Vehicle* v)
 	{
-		if (v->current_order.type == OT_GOTO_STATION) {
-			m_destTile = CalcStationCenterTile(v->current_order.dest);
-			m_dest_station_id = v->current_order.dest;
-			m_destTrackdirs = INVALID_TRACKDIR_BIT;
-		} else {
-			m_destTile = v->dest_tile;
-			m_dest_station_id = INVALID_STATION;
-			m_destTrackdirs = (TrackdirBits)(GetTileTrackStatus(v->dest_tile, TRANSPORT_RAIL) & TRACKDIR_BIT_MASK);
+		switch (v->current_order.type) {
+			case OT_GOTO_STATION:
+				m_destTile = CalcStationCenterTile(v->current_order.dest);
+				m_dest_station_id = v->current_order.dest;
+				m_destTrackdirs = INVALID_TRACKDIR_BIT;
+				break;
+
+			case OT_GOTO_WAYPOINT: {
+				Waypoint *wp = GetWaypoint(v->current_order.dest);
+				if (wp == NULL) break;
+				m_destTile = wp->xy;
+				m_dest_station_id = INVALID_STATION;
+				m_destTrackdirs = TrackToTrackdirBits(AxisToTrack(GetWaypointAxis(wp->xy)));
+				break;
+			}
+
+			default:
+				m_destTile = v->dest_tile;
+				m_dest_station_id = INVALID_STATION;
+				m_destTrackdirs = (TrackdirBits)(GetTileTrackStatus(v->dest_tile, TRANSPORT_RAIL) & TRACKDIR_BIT_MASK);
+				break;
 		}
 		CYapfDestinationRailBase::SetDestination(v);
 	}