diff options
author | yexo <yexo@openttd.org> | 2009-04-20 23:49:27 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2009-04-20 23:49:27 +0000 |
commit | 61d883e7e5bf2cd7d946725017fe4163d640fbb6 (patch) | |
tree | 03a133c9b29e5690f1470e530117c0ee9b05614f /src/ai/api/ai_order.cpp | |
parent | a664a2668cdfc0901ce2bf75b698960fab18d9c0 (diff) | |
download | openttd-61d883e7e5bf2cd7d946725017fe4163d640fbb6.tar.xz |
(svn r16107) -Add [NoAI]: AIOF_STOP_IN_DEPOT to the orderflags in AIOrder to allow stop-in-depot orders
Diffstat (limited to 'src/ai/api/ai_order.cpp')
-rw-r--r-- | src/ai/api/ai_order.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/ai/api/ai_order.cpp b/src/ai/api/ai_order.cpp index 9278b9f82..6e5bd28cd 100644 --- a/src/ai/api/ai_order.cpp +++ b/src/ai/api/ai_order.cpp @@ -74,7 +74,10 @@ static OrderType GetOrderTypeByTile(TileIndex t) (((order_flags & AIOF_NO_UNLOAD) == 0) || ((order_flags & AIOF_NO_LOAD) == 0)) && (((order_flags & AIOF_FULL_LOAD_ANY) == 0) || ((order_flags & AIOF_NO_LOAD) == 0)); - case OT_GOTO_DEPOT: return (order_flags & ~(AIOF_NON_STOP_FLAGS | AIOF_SERVICE_IF_NEEDED)) == 0; + case OT_GOTO_DEPOT: + return ((order_flags & ~(AIOF_NON_STOP_FLAGS | AIOF_DEPOT_FLAGS)) == 0) && + (((order_flags & AIOF_SERVICE_IF_NEEDED) == 0) || ((order_flags & AIOF_STOP_IN_DEPOT) == 0)); + case OT_GOTO_WAYPOINT: return (order_flags & ~(AIOF_NON_STOP_FLAGS)) == 0; default: return false; } @@ -145,6 +148,7 @@ static OrderType GetOrderTypeByTile(TileIndex t) switch (order->GetType()) { case OT_GOTO_DEPOT: if (order->GetDepotOrderType() & ODTFB_SERVICE) order_flags |= AIOF_SERVICE_IF_NEEDED; + if (order->GetDepotActionType() & ODATFB_HALT) order_flags |= AIOF_STOP_IN_DEPOT; break; case OT_GOTO_STATION: @@ -260,9 +264,12 @@ static OrderType GetOrderTypeByTile(TileIndex t) Order order; switch (::GetOrderTypeByTile(destination)) { - case OT_GOTO_DEPOT: - order.MakeGoToDepot(::GetDepotByTile(destination)->index, (OrderDepotTypeFlags)(ODTFB_PART_OF_ORDERS | ((order_flags & AIOF_SERVICE_IF_NEEDED) ? ODTFB_SERVICE : 0))); + case OT_GOTO_DEPOT: { + OrderDepotTypeFlags odtf = (OrderDepotTypeFlags)(ODTFB_PART_OF_ORDERS | ((order_flags & AIOF_SERVICE_IF_NEEDED) ? ODTFB_SERVICE : 0)); + OrderDepotActionFlags odaf = (OrderDepotActionFlags)(ODATF_SERVICE_ONLY | ((order_flags & AIOF_STOP_IN_DEPOT) ? ODATFB_HALT : 0)); + order.MakeGoToDepot(::GetDepotByTile(destination)->index, odtf, odaf); break; + } case OT_GOTO_STATION: order.MakeGoToStation(::GetStationIndex(destination)); @@ -357,9 +364,10 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance) switch (order->GetType()) { case OT_GOTO_DEPOT: - if ((current & AIOF_SERVICE_IF_NEEDED) != (order_flags & AIOF_SERVICE_IF_NEEDED)) { + if ((current & AIOF_DEPOT_FLAGS) != (order_flags & AIOF_DEPOT_FLAGS)) { uint data = DA_ALWAYS_GO; if (order_flags & AIOF_SERVICE_IF_NEEDED) data = DA_SERVICE; + if (order_flags & AIOF_STOP_IN_DEPOT) data = DA_STOP; return AIObject::DoCommand(0, vehicle_id | (order_position << 16), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags); } break; |