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  ) 
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 1795 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 210 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::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 592 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 1824 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 
)
VehicleOrderID ProcessConditionalOrder ( const Order order,
const Vehicle v 
)
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 2026 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, 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 1719 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 1909 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::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().