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, 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  ) 
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 1793 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 211 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,
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 1822 of file order_cmd.cpp.

References Clamp().

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

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 2028 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, 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 1717 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 1907 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().