OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Macros | 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.

## Macros
#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, bool ispercent)
| 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 1762 of file order_cmd.cpp.

References _cheats, _local_company, _settings_client, _settings_game, AddVehicleAdviceNewsItem(), Station::airport, CanVehicleUseStation(), Vehicle::day_counter, OrderList::DebugCheckSanity(), Vehicle::engine_type, Order::Equals(), Vehicle::FirstShared(), AirportFTAClass::flags, SpecializedStation< Station, false >::Get(), Order::GetDestination(), OrderList::GetFirstOrder(), Airport::GetFTA(), Vehicle::GetLastOrder(), Vehicle::GetNumOrders(), ClientSettings::gui, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_STRING_ID, Order::IsType(), Vehicle::list, Cheats::no_jetcrash, GUISettings::order_review_system, Vehicle::orders, Vehicle::owner, VehicleSettings::plane_crashes, SetDParam(), AirportFTAClass::SHORT_STRIP, BaseVehicle::type, Cheat::value, VEH_AIRCRAFT, GameSettings::vehicle, Vehicle::vehstatus, VS_CRASHED, and VS_STOPPED.

Referenced by Ship::OnNewDay(), Aircraft::OnNewDay(), RoadVehicle::OnNewDay(), and Train::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 1925 of file order_cmd.cpp.

References CancelLoadingDueToDeletedOrder(), BaseConsist::cur_implicit_order_index, BaseConsist::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 213 of file order_gui.cpp.

References _current_text_dir, _station_load_types, ConvertSpeedToDisplaySpeed(), BaseConsist::cur_implicit_order_index, BaseConsist::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::GetWaitTime(), Order::IsAutoRefit(), Order::IsGotoOrder(), Vehicle::IsGroundVehicle(), Order::IsRefit(), Order::IsType(), Order::IsWaitTimetabled(), Order::next, OCC_IS_FALSE, OCC_IS_TRUE, OCV_MAX_SPEED, OCV_UNCONDITIONALLY, ODATFB_HALT, ODATFB_NEAREST_DEPOT, ODTFB_SERVICE, ONSF_NO_STOP_AT_DESTINATION_STATION, ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS, SA_FORCE, SA_RIGHT, SetDParam(), SetTimetableParams(), TC_NO_SHADE, TD_RTL, BaseVehicle::type, VEH_AIRCRAFT, and VEH_TRAIN.

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 697 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,
|  | bool | ispercent
| ) |  |

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 1954 of file order_cmd.cpp.

References Clamp().

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

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

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

Definition at line 252 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 2010 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 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 2160 of file order_cmd.cpp.

References CheckForValidOrders(), BaseConsist::cur_implicit_order_index, BaseConsist::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, ODTFB_PART_OF_ORDERS, ONSF_NO_STOP_AT_DESTINATION_STATION, SetWindowClassesDirty(), Vehicle::tile, BaseVehicle::type, UpdateOrderDest(), Vehicle::UpdateRealOrderIndex(), UpdateVehicleTimetable(), VEH_AIRCRAFT, VEH_ROAD, VEH_SHIP, VEH_TRAIN, and VIWD_MODIFY_ORDERS.

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 1837 of file order_cmd.cpp.

References Vehicle::current_order, DeleteOrder(), Vehicle::FirstShared(), FOR_ALL_VEHICLES, Order::GetDepotActionType(), Order::GetDestination(), Order::GetTimetabledWait(), Order::GetType(), Order::GetWaitTime(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_VEH_ORDER_ID, InvalidateVehicleOrder(), Order::IsTravelTimetabled(), Order::IsType(), Order::IsWaitTimetabled(), Vehicle::list, Order::MakeDummy(), Order::next, Vehicle::NextShared(), ODATFB_NEAREST_DEPOT, Vehicle::orders, OrderBackup::RemoveOrder(), Order::SetTravelTimetabled(), Order::SetWaitTime(), Order::SetWaitTimetabled(), SetWindowDirty(), BaseVehicle::type, OrderList::UpdateTimetableDuration(), OrderList::UpdateTotalDuration(), 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 2039 of file order_cmd.cpp.

References AircraftNextAirportPos_and_Order(), CMD_REVERSE_TRAIN_DIRECTION, BaseConsist::cur_implicit_order_index, BaseConsist::cur_real_order_index, Vehicle::current_order, BaseConsist::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::GetTimetabledTravel(), 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(), ODATFB_NEAREST_DEPOT, ODTFB_SERVICE, ProcessConditionalOrder(), SetBit(), Aircraft::state, Aircraft::targetairport, Vehicle::tile, BaseVehicle::type, UpdateOrderDest(), Vehicle::UpdateRealOrderIndex(), UpdateVehicleTimetable(), VEH_AIRCRAFT, and VEH_TRAIN.

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