changeset 10365:8a6982cd3a55 draft

(svn r14616) -Fix [FS#2424]: a nearest depot order should be "equal" to the resolved nearest depot order; otherwise we keep resolving the nearest depot order every tick.
author rubidium <rubidium@openttd.org>
date Sun, 23 Nov 2008 21:46:27 +0000
parents 649d79c4d5a4
children dfebdb4bcdaa
files src/order_cmd.cpp
diffstat 1 files changed, 13 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -115,6 +115,19 @@
 
 bool Order::Equals(const Order &other) const
 {
+	/* In case of go to nearest depot orders we need "only" compare the flags
+	 * with the other and not the nearest depot order bit or the actual
+	 * destination because those get clear/filled in during the order
+	 * evaluation. If we do not do this the order will continuously be seen as
+	 * a different order and it will try to find a "nearest depot" every tick. */
+	if ((this->type == OT_GOTO_DEPOT && this->type == other.type) &&
+			((this->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0 ||
+			 (other.GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0)) {
+		return
+			this->GetDepotOrderType() == other.GetDepotOrderType() &&
+			(this->GetDepotActionType() & ~ODATFB_NEAREST_DEPOT) == (other.GetDepotActionType() & ~ODATFB_NEAREST_DEPOT);
+	}
+
 	return
 			this->type  == other.type &&
 			this->flags == other.flags &&