Mercurial > hg > openttd
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 &&