AIOrder Class Reference

Class that handles all order related functions. More...

#include <ai_order.hpp>

Inheritance diagram for AIOrder:

AIObject SimpleCountedObject

Public Types

enum  ErrorMessages { ERR_ORDER_BASE = AIError::ERR_CAT_ORDER << AIError::ERR_CAT_BIT_SIZE, ERR_ORDER_TOO_MANY, ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION }
 All order related error messages. More...
enum  AIOrderFlags {
  AIOF_NONE = 0, AIOF_NON_STOP_INTERMEDIATE = 1 << 0, AIOF_NON_STOP_DESTINATION = 1 << 1, AIOF_UNLOAD = 1 << 2,
  AIOF_TRANSFER = 1 << 3, AIOF_NO_UNLOAD = 1 << 4, AIOF_FULL_LOAD = 2 << 5, AIOF_FULL_LOAD_ANY = 3 << 5,
  AIOF_NO_LOAD = 1 << 7, AIOF_SERVICE_IF_NEEDED = 1 << 2, AIOF_NON_STOP_FLAGS = AIOF_NON_STOP_INTERMEDIATE | AIOF_NON_STOP_DESTINATION, AIOF_UNLOAD_FLAGS = AIOF_TRANSFER | AIOF_UNLOAD | AIOF_NO_UNLOAD,
  AIOF_LOAD_FLAGS = AIOF_FULL_LOAD | AIOF_FULL_LOAD_ANY | AIOF_NO_LOAD, AIOF_INVALID = 0xFFFF
}
 Flags that can be used to modify the behaviour of orders. More...
enum  OrderPosition { ORDER_CURRENT = 0xFF, ORDER_INVALID = -1 }
 Different constants related to the OrderPosition. More...

Static Public Member Functions

static const char * GetClassName ()
static bool IsValidVehicleOrder (VehicleID vehicle_id, OrderPosition order_position)
 Checks whether the given order id is valid for the given vehicle.
static OrderPosition ResolveOrderPosition (VehicleID vehicle_id, OrderPosition order_position)
 Resolves the given order index to the correct index for the given vehicle.
static bool AreOrderFlagsValid (TileIndex destination, AIOrderFlags order_flags)
 Checks whether the given order flags are valid for the given destination.
static int32 GetOrderCount (VehicleID vehicle_id)
 Returns the number of orders for the given vehicle.
static TileIndex GetOrderDestination (VehicleID vehicle_id, OrderPosition order_position)
 Gets the destination of the given order for the given vehicle.
static AIOrderFlags GetOrderFlags (VehicleID vehicle_id, OrderPosition order_position)
 Gets the AIOrderFlags of the given order for the given vehicle.
static bool AppendOrder (VehicleID vehicle_id, TileIndex destination, AIOrderFlags order_flags)
 Appends an order to the end of the vehicle's order list.
static bool InsertOrder (VehicleID vehicle_id, OrderPosition order_position, TileIndex destination, AIOrderFlags order_flags)
 Inserts an order before the given order_position into the vehicle's order list.
static bool RemoveOrder (VehicleID vehicle_id, OrderPosition order_position)
 Removes an order from the vehicle's order list.
static bool _ChangeOrder ()
 Internal function to help ChangeOrder.
static bool ChangeOrder (VehicleID vehicle_id, OrderPosition order_position, AIOrderFlags order_flags)
 Changes the order flags of the given order.
static bool MoveOrder (VehicleID vehicle_id, OrderPosition order_position_move, OrderPosition order_position_target)
 Move an order inside the orderlist.
static bool CopyOrders (VehicleID vehicle_id, VehicleID main_vehicle_id)
 Copies the orders from another vehicle.
static bool ShareOrders (VehicleID vehicle_id, VehicleID main_vehicle_id)
 Shares the orders between two vehicles.
static bool UnshareOrders (VehicleID vehicle_id)
 Removes the given vehicle from a shared orders list.

Detailed Description

Class that handles all order related functions.

Definition at line 14 of file ai_order.hpp.


Member Enumeration Documentation

All order related error messages.

Enumerator:
ERR_ORDER_BASE  Base for all order related errors.
ERR_ORDER_TOO_MANY  No more space for orders.
ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION  Destination of new order is to far away from the previous order.

Definition at line 21 of file ai_order.hpp.

Flags that can be used to modify the behaviour of orders.

Enumerator:
AIOF_NONE  Just go to the station/depot, stop unload if possible and load if needed.

AIOF_NON_STOP_INTERMEDIATE  Do not stop at the stations that are passed when going to the destination.

Only for trains and road vehicles.

AIOF_NON_STOP_DESTINATION  Do not stop at the destionation station.

Only for trains and road vehicles.

AIOF_UNLOAD  Always unload the vehicle; only for stations.

Cannot be set when AIOF_TRANSFER or AIOF_NO_UNLOAD is set.

AIOF_TRANSFER  Transfer instead of deliver the goods; only for stations.

Cannot be set when AIOF_UNLOAD or AIOF_NO_UNLOAD is set.

AIOF_NO_UNLOAD  Never unload the vehicle; only for stations.

Cannot be set when AIOF_UNLOAD, AIOF_TRANSFER or AIOF_NO_LOAD is set.

AIOF_FULL_LOAD  Wait till the vehicle is fully loaded; only for stations.

Cannot be set when AIOF_NO_LOAD is set.

AIOF_FULL_LOAD_ANY  Wait till at least one cargo of the vehicle is fully loaded; only for stations.

Cannot be set when AIOF_NO_LOAD is set.

AIOF_NO_LOAD  Do not load any cargo; only for stations.

Cannot be set when AIOF_NO_UNLOAD, AIOF_FULL_LOAD or AIOF_FULL_LOAD_ANY is set.

AIOF_SERVICE_IF_NEEDED  Service the vehicle when needed, otherwise skip this order; only for depots.

AIOF_NON_STOP_FLAGS  All flags related to non-stop settings.

AIOF_UNLOAD_FLAGS  All flags related to unloading.

AIOF_LOAD_FLAGS  All flags related to loading.

AIOF_INVALID  For marking invalid order flags.

Definition at line 35 of file ai_order.hpp.

Different constants related to the OrderPosition.

Enumerator:
ORDER_CURRENT  Constant that gets resolved to the current order.
ORDER_INVALID  An invalid order.

Definition at line 73 of file ai_order.hpp.


Member Function Documentation

bool AIOrder::IsValidVehicleOrder ( VehicleID  vehicle_id,
OrderPosition  order_position 
) [static]

Checks whether the given order id is valid for the given vehicle.

Parameters:
vehicle_id The vehicle to check the order index for.
order_position The order index to check.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).
Returns:
True if and only if the order_position is valid for the given vehicle.

Definition at line 40 of file ai_order.cpp.

References AIVehicle::IsValidVehicle(), and ORDER_CURRENT.

Referenced by _ChangeOrder(), GetOrderDestination(), GetOrderFlags(), MoveOrder(), RemoveOrder(), and AIVehicle::SkipToVehicleOrder().

AIOrder::OrderPosition AIOrder::ResolveOrderPosition ( VehicleID  vehicle_id,
OrderPosition  order_position 
) [static]

Resolves the given order index to the correct index for the given vehicle.

If the order index was CURRENT_ORDER it will be resolved to the index of the current order (as shown in the order list). If the order with the given index does not exist it will return ORDER_INVALID.

Parameters:
vehicle_id The vehicle to check the order index for.
order_position The order index to resolve.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).
Returns:
The resolved order index.

Definition at line 45 of file ai_order.cpp.

References AIVehicle::IsValidVehicle(), ORDER_CURRENT, and ORDER_INVALID.

Referenced by _ChangeOrder(), InsertOrder(), MoveOrder(), RemoveOrder(), and AIVehicle::SkipToVehicleOrder().

bool AIOrder::AreOrderFlagsValid ( TileIndex  destination,
AIOrderFlags  order_flags 
) [static]

Checks whether the given order flags are valid for the given destination.

Parameters:
destination The destination of the order.
order_flags The flags given to the order.
Returns:
True if and only if the order_flags are valid for the given location.

Definition at line 54 of file ai_order.cpp.

References AIOF_FULL_LOAD_ANY, AIOF_LOAD_FLAGS, AIOF_NO_LOAD, AIOF_NO_UNLOAD, AIOF_NON_STOP_FLAGS, AIOF_SERVICE_IF_NEEDED, AIOF_TRANSFER, AIOF_UNLOAD, AIOF_UNLOAD_FLAGS, and GetOrderTypeByTile().

Referenced by _ChangeOrder(), and InsertOrder().

int32 AIOrder::GetOrderCount ( VehicleID  vehicle_id  )  [static]

Returns the number of orders for the given vehicle.

Parameters:
vehicle_id The vehicle to get the order count of.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).
Returns:
The number of orders for the given vehicle or a negative value when the vehicle does not exist.

Definition at line 73 of file ai_order.cpp.

References AIVehicle::IsValidVehicle().

TileIndex AIOrder::GetOrderDestination ( VehicleID  vehicle_id,
OrderPosition  order_position 
) [static]

Gets the destination of the given order for the given vehicle.

Parameters:
vehicle_id The vehicle to get the destination for.
order_position The order to get the destination for.
Precondition:
IsValidVehicleOrder(vehicle_id, order_position).
Note:
Giving CURRENT_ORDER as order_position will give the order that is currently being executed by the vehicle. This is not necessarily the current order as given by ResolveOrderPosition (the current index in the order list) as manual or autoservicing depot orders do not show up in the orderlist, but they can be the current order of a vehicle.
Returns:
The destination tile of the order.

Definition at line 78 of file ai_order.cpp.

References INVALID_TILE, IsValidVehicleOrder(), and ORDER_CURRENT.

Referenced by _ChangeOrder().

AIOrder::AIOrderFlags AIOrder::GetOrderFlags ( VehicleID  vehicle_id,
OrderPosition  order_position 
) [static]

Gets the AIOrderFlags of the given order for the given vehicle.

Parameters:
vehicle_id The vehicle to get the destination for.
order_position The order to get the destination for.
Precondition:
IsValidVehicleOrder(vehicle_id, order_position).
Note:
Giving CURRENT_ORDER as order_position will give the order that is currently being executed by the vehicle. This is not necessarily the current order as given by ResolveOrderPosition (the current index in the order list) as manual or autoservicing depot orders do not show up in the orderlist, but they can be the current order of a vehicle.
Returns:
The AIOrderFlags of the order.

Definition at line 102 of file ai_order.cpp.

References AIOF_INVALID, AIOF_NONE, AIOF_SERVICE_IF_NEEDED, IsValidVehicleOrder(), ODTFB_SERVICE, and ORDER_CURRENT.

Referenced by _ChangeOrder().

bool AIOrder::AppendOrder ( VehicleID  vehicle_id,
TileIndex  destination,
AIOrderFlags  order_flags 
) [static]

Appends an order to the end of the vehicle's order list.

Parameters:
vehicle_id The vehicle to append the order to.
destination The destination of the order.
order_flags The flags given to the order.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).

AreOrderFlagsValid(destination, order_flags).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
AIOrder::ERR_ORDER_NO_MORE_SPACE 
AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION 
Returns:
True if and only if the order was appended.

Definition at line 132 of file ai_order.cpp.

References EnforcePrecondition, InsertOrder(), and AIVehicle::IsValidVehicle().

bool AIOrder::InsertOrder ( VehicleID  vehicle_id,
OrderPosition  order_position,
TileIndex  destination,
AIOrder::AIOrderFlags  order_flags 
) [static]

Inserts an order before the given order_position into the vehicle's order list.

Parameters:
vehicle_id The vehicle to add the order to.
order_position The order to place the new order before.
destination The destination of the order.
order_flags The flags given to the order.
Precondition:
IsValidVehicleOrder(vehicle_id, order_position).

AreOrderFlagsValid(destination, order_flags).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
AIOrder::ERR_ORDER_NO_MORE_SPACE 
AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION 
Returns:
True if and only if the order was inserted.

Definition at line 138 of file ai_order.cpp.

References AIOF_SERVICE_IF_NEEDED, AreOrderFlagsValid(), CMD_INSERT_ORDER, AIObject::DoCommand(), EnforcePrecondition, GB(), GetDepotByTile(), GetOrderTypeByTile(), GetStationIndex(), GetWaypointIndex(), AIVehicle::IsValidVehicle(), ODTFB_PART_OF_ORDERS, ODTFB_SERVICE, ORDER_CURRENT, and ResolveOrderPosition().

Referenced by AppendOrder().

bool AIOrder::RemoveOrder ( VehicleID  vehicle_id,
OrderPosition  order_position 
) [static]

Removes an order from the vehicle's order list.

Parameters:
vehicle_id The vehicle to remove the order from.
order_position The order to remove from the order list.
Precondition:
AIVehicle::IsValidVehicleOrder(vehicle_id, order_position).
Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
Returns:
True if and only if the order was removed.

Definition at line 172 of file ai_order.cpp.

References CMD_DELETE_ORDER, AIObject::DoCommand(), EnforcePrecondition, IsValidVehicleOrder(), and ResolveOrderPosition().

bool AIOrder::ChangeOrder ( VehicleID  vehicle_id,
OrderPosition  order_position,
AIOrder::AIOrderFlags  order_flags 
) [static]

Changes the order flags of the given order.

Parameters:
vehicle_id The vehicle to change the order of.
order_position The order to change.
order_flags The new flags given to the order.
Precondition:
IsValidVehicleOrder(vehicle_id, order_position).

AreOrderFlagsValid(GetOrderDestination(vehicle_id, order_position), order_flags).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
Returns:
True if and only if the order was changed.

Definition at line 247 of file ai_order.cpp.

References _ChangeOrder().

bool AIOrder::MoveOrder ( VehicleID  vehicle_id,
OrderPosition  order_position_move,
OrderPosition  order_position_target 
) [static]

Move an order inside the orderlist.

Parameters:
vehicle_id The vehicle to move the orders.
order_position_move The order to move.
order_position_target The target order
Precondition:
IsValidVehicleOrder(vehicle_id, order_position_move).

IsValidVehicleOrder(vehicle_id, order_position_target).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
Returns:
True if and only if the order was moved.
Note:
If the order is moved to a lower place (e.g. from 7 to 2) the target order is moved upwards (e.g. 3). If the order is moved to a higher place (e.g. from 7 to 9) the target will be moved downwards (e.g. 8).

Definition at line 258 of file ai_order.cpp.

References CMD_MOVE_ORDER, AIObject::DoCommand(), EnforcePrecondition, IsValidVehicleOrder(), and ResolveOrderPosition().

bool AIOrder::CopyOrders ( VehicleID  vehicle_id,
VehicleID  main_vehicle_id 
) [static]

Copies the orders from another vehicle.

The orders of the main vehicle are going to be the orders of the changed vehicle.

Parameters:
vehicle_id The vehicle to copy the orders to.
main_vehicle_id The vehicle to copy the orders from.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).

AIVehicle::IsValidVehicle(main_vehicle_id).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
AIOrder::ERR_ORDER_NO_MORE_SPACE 
Returns:
True if and only if the copying succeeded.

Definition at line 269 of file ai_order.cpp.

References CMD_CLONE_ORDER, AIObject::DoCommand(), EnforcePrecondition, and AIVehicle::IsValidVehicle().

bool AIOrder::ShareOrders ( VehicleID  vehicle_id,
VehicleID  main_vehicle_id 
) [static]

Shares the orders between two vehicles.

The orders of the main vehicle are going to be the orders of the changed vehicle.

Parameters:
vehicle_id The vehicle to add to the shared order list.
main_vehicle_id The vehicle to share the orders with.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).

AIVehicle::IsValidVehicle(main_vehicle_id).

Exceptions:
AIError::ERR_OWNED_BY_ANOTHER_COMPANY 
Returns:
True if and only if the sharing succeeded.

Definition at line 277 of file ai_order.cpp.

References CMD_CLONE_ORDER, AIObject::DoCommand(), EnforcePrecondition, and AIVehicle::IsValidVehicle().

bool AIOrder::UnshareOrders ( VehicleID  vehicle_id  )  [static]

Removes the given vehicle from a shared orders list.

Parameters:
vehicle_id The vehicle to remove from the shared order list.
Precondition:
AIVehicle::IsValidVehicle(vehicle_id).
Returns:
True if and only if the unsharing succeeded.

Definition at line 285 of file ai_order.cpp.

References CMD_CLONE_ORDER, AIObject::DoCommand(), EnforcePrecondition, and AIVehicle::IsValidVehicle().


The documentation for this class was generated from the following files:

Generated on Mon Feb 16 23:12:33 2009 for openttd by  doxygen 1.5.6