summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-11-23 21:46:27 +0000
committerrubidium <rubidium@openttd.org>2008-11-23 21:46:27 +0000
commitf28992719d8b3b554fda934f9d5cb11184e93da4 (patch)
treea9c4bd302b0aaf9cede2d8466554fe160317248b
parent54128db1cfa71bd861e6eb4cdd9bb07bbbaa9930 (diff)
downloadopenttd-f28992719d8b3b554fda934f9d5cb11184e93da4.tar.xz
(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.
-rw-r--r--src/order_cmd.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp
index 9d7f855ff..f0806f607 100644
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -115,6 +115,19 @@ void Order::FreeChain()
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 &&