Defines | Functions

# order_func.h File Reference

Functions related to orders. More...

`#include "order_type.h"`
`#include "vehicle_type.h"`
`#include "company_type.h"`

Go to the source code of this file.

## Defines
#define | MIN_SERVINT_PERCENT 5
#define | MAX_SERVINT_PERCENT 90
#define | MIN_SERVINT_DAYS 30
#define | MAX_SERVINT_DAYS 800
## Functions
void | RemoveOrderFromAllVehicles (OrderType type, DestinationID destination)
| Removes an order from all vehicles.
void | InvalidateVehicleOrder (const Vehicle *v, int data)
| Updates the widgets of a vehicle which contains the order-data.
void | CheckOrders (const Vehicle *)
| Check the orders of a vehicle, to see if there are invalid orders and stuff.
void | DeleteVehicleOrders (Vehicle *v, bool keep_orderlist=false, bool reset_order_indices=true)
| Delete all orders from a vehicle.
bool | ProcessOrders (Vehicle *v)
| Handle the orders of a vehicle and determine the next place to go to if needed.
bool | UpdateOrderDest (Vehicle *v, const Order *order, int conditional_depth=0, bool pbs_look_ahead=false)
| Update the vehicle's destination tile from an order.
VehicleOrderID | ProcessConditionalOrder (const Order *order, const Vehicle *v)
| Process a conditional order and determine the next order.
uint | GetOrderDistance (const Order *prev, const Order *cur, const Vehicle *v, int conditional_depth=0)
| Get the distance between two orders of a vehicle.
void | DrawOrderString (const Vehicle *v, const Order *order, int order_index, int y, bool selected, bool timetable, int left, int middle, int right)
| Draws an order in order or timetable GUI.
uint16 | GetServiceIntervalClamped (uint interval, CompanyID company_id)
| Clamp the service interval to the correct min/max.

## Detailed Description

Functions related to orders.

Definition in file order_func.h.

## Function Documentation

void CheckOrders | ( | const Vehicle * | v | ) |

Check the orders of a vehicle, to see if there are invalid orders and stuff.

Definition at line 1770 of file order_cmd.cpp.

References _local_company, _settings_client, AddVehicleNewsItem(), CanVehicleUseStation(), Vehicle::day_counter, OrderList::DebugCheckSanity(), Order::Equals(), Vehicle::FirstShared(), SpecializedStation< Station, false >::Get(), Order::GetDestination(), OrderList::GetFirstOrder(), Vehicle::GetLastOrder(), Vehicle::GetNumOrders(), ClientSettings::gui, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Order::IsType(), Vehicle::list, NS_ADVICE, GUISettings::order_review_system, Vehicle::orders, Vehicle::owner, SetDParam(), Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.

Referenced by Train::OnNewDay(), Ship::OnNewDay(), RoadVehicle::OnNewDay(), and Aircraft::OnNewDay().

void DeleteVehicleOrders | ( | Vehicle * | v,
|  | bool | keep_orderlist,
|  | bool | reset_order_indices |
| ) |  |  |

Delete all orders from a vehicle.

Parameters:

  | v | Vehicle whose orders to reset
  | keep_orderlist | If true, do not free the order list, only empty it.
  | reset_order_indices | If true, reset cur_implicit_order_index and cur_real_order_index and cancel the current full load order (if the vehicle is loading). If false, _you_ have to make sure the order indices are valid after your messing with them!

Definition at line 1920 of file order_cmd.cpp.

References CancelLoadingDueToDeletedOrder(), Vehicle::cur_implicit_order_index, Vehicle::cur_real_order_index, Vehicle::current_order, DeleteOrderWarnings(), OrderList::FreeChain(), Vehicle::IsOrderListShared(), Order::IsType(), Vehicle::list, Vehicle::orders, and Vehicle::RemoveFromShared().

Referenced by CmdCloneOrder(), CmdMoveRailVehicle(), CmdSellRailWagon(), DecloneOrder(), and Vehicle::PreDestructor().

void DrawOrderString | ( | const Vehicle * | v,
|  | const Order * | order,
|  | int | order_index,
|  | int | y,
|  | bool | selected,
|  | bool | timetable,
|  | int | left,
|  | int | middle,
|  | int | right |
| ) |  |  |

Draws an order in order or timetable GUI.

Parameters:

  | v | Vehicle the order belongs to
  | order | The order to draw
  | order_index | Index of the order in the orders of the vehicle
  | y | Y position for drawing
  | selected | True, if the order is selected
  | timetable | True, when drawing in the timetable GUI
  | left | Left border for text drawing
  | middle | X position between order index and order text
  | right | Right border for text drawing

Definition at line 210 of file order_gui.cpp.

References _current_text_dir, _station_load_types, ConvertSpeedToDisplaySpeed(), Vehicle::cur_implicit_order_index, Vehicle::cur_real_order_index, DrawSprite(), DrawString(), FONT_HEIGHT_NORMAL, SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), CargoSpec::Get(), Order::GetConditionComparator(), Order::GetConditionSkipToOrder(), Order::GetConditionValue(), Order::GetConditionVariable(), Order::GetDepotActionType(), Order::GetDepotOrderType(), Order::GetDestination(), Vehicle::GetFirstOrder(), Order::GetLoadType(), Order::GetNonStopType(), GetOrderDistance(), Aircraft::GetRange(), Order::GetRefitCargo(), GetSpriteSize(), Order::GetStopLocation(), Order::GetType(), Order::GetUnloadType(), Order::IsAutoRefit(), Order::IsGotoOrder(), Vehicle::IsGroundVehicle(), Order::IsRefit(), Order::IsType(), Order::next, OCC_IS_FALSE, OCC_IS_TRUE, SA_FORCE, SA_RIGHT, SetDParam(), SetTimetableParams(), TC_NO_SHADE, BaseVehicle::type, VEH_AIRCRAFT, VEH_TRAIN, and Order::wait_time.

Referenced by TimetableWindow::DrawWidget(), and OrdersWindow::DrawWidget().

uint GetOrderDistance | ( | const Order * | prev,
|  | const Order * | cur,
|  | const Vehicle * | v,
|  | int | conditional_depth |
| ) |  |  |

Get the distance between two orders of a vehicle.

Conditional orders are resolved and the bigger distance of the two order branches is returned.

Parameters:

  | prev | Origin order.
  | cur | Destination order.
  | v | The vehicle to get the distance for.
  | conditional_depth | Internal param for resolving conditional orders.

Returns:
  Maximum distance between the two orders.

Definition at line 722 of file order_cmd.cpp.

References DistanceManhattan(), DistanceSquare(), Order::GetConditionSkipToOrder(), OrderList::GetFirstOrder(), Order::GetLocation(), Vehicle::GetNumOrders(), Vehicle::GetOrder(), GetOrderDistance(), INVALID_TILE, Order::IsType(), Vehicle::list, max(), Order::next, Vehicle::orders, BaseVehicle::type, and VEH_AIRCRAFT.

Referenced by CheckAircraftOrderDistance(), CmdInsertOrder(), DrawOrderString(), and GetOrderDistance().

uint16 GetServiceIntervalClamped | ( | uint | interval,
|  | CompanyID | company_id |
| ) |  |  |

Clamp the service interval to the correct min/max.

The actual min/max values depend on whether it's in percent or days.

Parameters:

  | interval | proposed service interval
  | company_id | the owner of the vehicle

Returns:
  Clamped service interval

Definition at line 1949 of file order_cmd.cpp.

References Clamp(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get().

Referenced by CmdChangeServiceInt(), and VehicleDetailsWindow::OnClick().

void InvalidateVehicleOrder | ( | const Vehicle * | v,
|  | int | data |
| ) |  |  |

Updates the widgets of a vehicle which contains the order-data.

Definition at line 253 of file order_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), SetWindowDirty(), WC_VEHICLE_ORDERS, WC_VEHICLE_TIMETABLE, and WC_VEHICLE_VIEW.

Referenced by Vehicle::BeginLoading(), CmdCloneOrder(), CmdModifyOrder(), CmdMoveOrder(), CmdOrderRefit(), CmdSkipToOrder(), DecloneOrder(), DeleteOrder(), Vehicle::DeleteUnreachedImplicitOrders(), Vehicle::IncrementImplicitOrderIndex(), Vehicle::IncrementRealOrderIndex(), InsertOrder(), ProcessOrders(), Vehicle::RemoveFromShared(), and RemoveOrderFromAllVehicles().

VehicleOrderID ProcessConditionalOrder | ( | const Order * | order,
|  | const Vehicle * | v |
| ) |  |  |

Process a conditional order and determine the next order.

Parameters:

  | order | the order the vehicle currently has
  | v | the vehicle to update

Returns:
  index of next order to jump to, or INVALID_VEH_ORDER_ID to use the next order

Definition at line 2005 of file order_cmd.cpp.

References Vehicle::age, CalcPercentVehicleFilled(), DAYS_IN_LEAP_YEAR, Order::GetConditionComparator(), Order::GetConditionSkipToOrder(), Order::GetConditionValue(), Order::GetConditionVariable(), Vehicle::GetDisplayMaxSpeed(), Order::GetType(), INVALID_VEH_ORDER_ID, max(), Vehicle::max_age, Vehicle::NeedsServicing(), OCV_AGE, OCV_LOAD_PERCENTAGE, OCV_MAX_SPEED, OCV_RELIABILITY, OCV_REMAINING_LIFETIME, OCV_REQUIRES_SERVICE, OCV_UNCONDITIONALLY, OrderConditionCompare(), Vehicle::reliability, and ToPercent16().

Referenced by OrderList::GetNextStoppingOrder(), VehicleOrderSaver::SwitchToNextOrder(), and UpdateOrderDest().

bool ProcessOrders | ( | Vehicle * | v | ) |

Handle the orders of a vehicle and determine the next place to go to if needed.

Parameters:

  | v | the vehicle to do this for.

Returns:
  true *if* the vehicle is eligible for reversing (basically only when leaving a station).

Reversing because of order change is allowed only just after leaving a station (and the difficulty setting to allowed, of course) this can be detected because only after OT_LEAVESTATION, current_order will be reset to nothing. (That also happens if no order, but in that case it won't hit the point in code where may_reverse is checked)

Definition at line 2151 of file order_cmd.cpp.

References CheckForValidOrders(), Vehicle::cur_implicit_order_index, Vehicle::cur_real_order_index, Vehicle::current_order, Vehicle::DeleteUnreachedImplicitOrders(), Vehicle::dest_tile, Order::Equals(), Order::Free(), SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), SpecializedStation< Station, false >::Get(), Order::GetDepotOrderType(), Order::GetDestination(), Order::GetNonStopType(), Vehicle::GetNumManualOrders(), Vehicle::GetNumOrders(), Vehicle::GetOrder(), GetStationIndex(), Order::GetType(), GetWindowClassForVehicleType(), Vehicle::IncrementImplicitOrderIndex(), INVALID_TILE, InvalidateVehicleOrder(), IsTileType(), Order::IsType(), Vehicle::last_station_visited, MP_STATION, SetWindowClassesDirty(), Vehicle::tile, BaseVehicle::type, UpdateOrderDest(), Vehicle::UpdateRealOrderIndex(), UpdateVehicleTimetable(), VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, and VEH_TRAIN.

Referenced by CheckNextTrainTile().

void RemoveOrderFromAllVehicles | ( | OrderType | type,
|  | DestinationID | destination |
| ) |  |  |

Removes an order from all vehicles.

Triggers when, say, a station is removed.

Parameters:

  | type | The type of the order (OT_GOTO_[STATION|DEPOT|WAYPOINT]).
  | destination | The destination. Can be a StationID, DepotID or WaypointID.

Definition at line 1844 of file order_cmd.cpp.

References Vehicle::current_order, DeleteOrder(), Vehicle::FirstShared(), FOR_ALL_VEHICLES, Order::GetDepotActionType(), Order::GetDestination(), Order::GetType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_VEH_ORDER_ID, InvalidateVehicleOrder(), Order::IsType(), Order::MakeDummy(), Order::next, Vehicle::NextShared(), OrderBackup::RemoveOrder(), SetWindowDirty(), BaseVehicle::type, VEH_AIRCRAFT, and WC_VEHICLE_VIEW.

Referenced by Depot::~Depot(), and Station::~Station().

bool UpdateOrderDest | ( | Vehicle * | v,
|  | const Order * | order,
|  | int | conditional_depth,
|  | bool | pbs_look_ahead |
| ) |  |  |

Update the vehicle's destination tile from an order.

Parameters:

  | order | the order the vehicle currently has
  | v | the vehicle to update
  | conditional_depth | the depth (amount of steps) to go with conditional orders. This to prevent infinite loops.
  | pbs_look_ahead | Whether we are forecasting orders for pbs reservations in advance. If true, the order indices must not be modified.

Definition at line 2034 of file order_cmd.cpp.

References AircraftNextAirportPos_and_Order(), CMD_REVERSE_TRAIN_DIRECTION, Vehicle::cur_implicit_order_index, Vehicle::cur_real_order_index, Vehicle::current_order, Vehicle::current_order_time, DC_EXEC, Vehicle::dest_tile, DoCommand(), Vehicle::FindClosestDepot(), FLYING, Order::Free(), SpecializedVehicle< Aircraft, VEH_AIRCRAFT >::From(), SpecializedStation< Waypoint, true >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_depot_pool >::Get(), Order::GetDepotActionType(), Order::GetDepotOrderType(), Order::GetDestination(), Vehicle::GetGroundVehicleFlags(), Order::GetNonStopType(), Vehicle::GetNumManualOrders(), Vehicle::GetNumOrders(), Vehicle::GetOrder(), Vehicle::GetOrderStationLocation(), Order::GetRefitCargo(), Order::GetRefitSubtype(), Order::GetType(), GVF_SUPPRESS_IMPLICIT_ORDERS, Vehicle::IncrementRealOrderIndex(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_VEH_ORDER_ID, Vehicle::IsGroundVehicle(), Order::MakeGoToDepot(), Vehicle::NeedsServicing(), ProcessConditionalOrder(), SetBit(), Aircraft::state, Aircraft::targetairport, Vehicle::tile, Order::travel_time, BaseVehicle::type, UpdateOrderDest(), Vehicle::UpdateRealOrderIndex(), UpdateVehicleTimetable(), VEH_AIRCRAFT, and VEH_TRAIN.

Referenced by ProcessOrders(), VehicleOrderSaver::SwitchToNextOrder(), and UpdateOrderDest().