OpenTTD Source 20250312-master-gcdcc6b491d
road_cmd.h File Reference

Road related functions. More...

#include "direction_type.h"
#include "road_type.h"
#include "command_type.h"

Go to the source code of this file.

Functions

void DrawRoadDepotSprite (int x, int y, DiagDirection dir, RoadType rt)
 Draw the road depot sprite.
 
void UpdateNearestTownForRoadTiles (bool invalidate)
 Updates cached nearest town for all road tiles.
 
CommandCost CmdBuildLongRoad (DoCommandFlags flags, TileIndex end_tile, TileIndex start_tile, RoadType rt, Axis axis, DisallowedRoadDirections drd, bool start_half, bool end_half, bool is_ai)
 Build a long piece of road.
 
std::tuple< CommandCost, MoneyCmdRemoveLongRoad (DoCommandFlags flags, TileIndex end_tile, TileIndex start_tile, RoadType rt, Axis axis, bool start_half, bool end_half)
 Remove a long piece of road.
 
CommandCost CmdBuildRoad (DoCommandFlags flags, TileIndex tile, RoadBits pieces, RoadType rt, DisallowedRoadDirections toggle_drd, TownID town_id)
 Build a piece of road.
 
CommandCost CmdBuildRoadDepot (DoCommandFlags flags, TileIndex tile, RoadType rt, DiagDirection dir)
 Build a road depot.
 
CommandCost CmdConvertRoad (DoCommandFlags flags, TileIndex tile, TileIndex area_start, RoadType to_type)
 Convert one road subtype to another.
 
void CcRoadDepot (Commands cmd, const CommandCost &result, TileIndex tile, RoadType rt, DiagDirection dir)
 
void CcRoadStop (Commands cmd, const CommandCost &result, TileIndex tile, uint8_t width, uint8_t length, RoadStopType, bool is_drive_through, DiagDirection dir, RoadType, RoadStopClassID spec_class, uint16_t spec_index, StationID, bool)
 Command callback for building road stops.
 

Variables

CommandCallback CcPlaySound_CONSTRUCTION_OTHER
 
CommandCallback CcBuildRoadTunnel
 

Detailed Description

Road related functions.

Definition in file road_cmd.h.

Function Documentation

◆ CcRoadDepot()

void CcRoadDepot ( Commands  cmd,
const CommandCost result,
TileIndex  tile,
RoadType  rt,
DiagDirection  dir 
)

Definition at line 174 of file road_gui.cpp.

◆ CcRoadStop()

void CcRoadStop ( Commands  cmd,
const CommandCost result,
TileIndex  tile,
uint8_t  width,
uint8_t  length,
RoadStopType  ,
bool  is_drive_through,
DiagDirection  dir,
RoadType  ,
RoadStopClassID  spec_class,
uint16_t  spec_index,
StationID  ,
bool   
)

Command callback for building road stops.

Parameters
resultResult of the build road stop command.
tileStart tile.
widthWidth of the road stop.
lengthLength of the road stop.
is_drive_throughFalse for normal stops, true for drive-through.
dirEntrance direction (DiagDirection) for normal stops. Converted to the axis for drive-through stops.
spec_classRoad stop spec class.
spec_indexRoad stop spec index.
See also
CmdBuildRoadStop

Definition at line 195 of file road_gui.cpp.

References _settings_client, SoundSettings::confirm, ConnectRoadToStructure(), CommandCost::Failed(), NewGRFClass< Tspec, Tindex, Tmax >::Get(), NewGRFClass< Tspec, Tindex, Tmax >::GetClassCount(), NewGRFClass< Tspec, Tindex, Tmax >::GetSpec(), ClientSettings::gui, NoAutoRoadConnection, GUISettings::persistent_buildingtools, ResetObjectToPlace(), ReverseDiagDir(), SND_1F_CONSTRUCTION_OTHER, ClientSettings::sound, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

Referenced by PlaceRoadStop().

◆ CmdBuildLongRoad()

CommandCost CmdBuildLongRoad ( DoCommandFlags  flags,
TileIndex  end_tile,
TileIndex  start_tile,
RoadType  rt,
Axis  axis,
DisallowedRoadDirections  drd,
bool  start_half,
bool  end_half,
bool  is_ai 
)

Build a long piece of road.

Parameters
flagsoperation to perform
end_tileend tile of drag
start_tilestart tile of drag
rtroad type
axisdirection
drdset road direction
start_halfstart tile starts in the 2nd half of tile (p2 & 1). Only used if is_ai is set or if we are building a single tile
end_halfend tile starts in the 2nd half of tile (p2 & 2). Only used if is_ai is set or if we are building a single tile
is_aidefines two different behaviors for this command:
  • false = Build up to an obstacle. Do not build the first and last roadbits unless they can be connected to something, or if we are building a single tile
  • true = Fail if an obstacle is found. Always take into account start_half and end_half. This behavior is used for scripts
Returns
the cost of this operation or an error

Definition at line 978 of file road_cmd.cpp.

References CommandCost::AddCost(), AXIS_X, AXIS_Y, AxisToDiagDir(), AxisToRoadBits(), CanConnectToRoad(), CMD_ERROR, DiagDirToRoadBits(), DRD_BOTH, DRD_NORTHBOUND, DRD_SOUTHBOUND, EXPENSES_CONSTRUCTION, CommandCost::Failed(), CommandCost::GetErrorMessage(), GetTunnelBridgeDirection(), IsBridge(), IsTileType(), IsValidAxis(), IsValidDisallowedRoadDirections(), MP_TUNNELBRIDGE, ReverseDiagDir(), Map::Size(), TileOffsByDiagDir(), TileX(), TileY(), and ValParamRoadType().

◆ CmdBuildRoad()

CommandCost CmdBuildRoad ( DoCommandFlags  flags,
TileIndex  tile,
RoadBits  pieces,
RoadType  rt,
DisallowedRoadDirections  toggle_drd,
TownID  town_id 
)

Build a piece of road.

Parameters
flagsoperation to perform
tiletile where to build road
piecesroad pieces to build (RoadBits)
rtroad type
toggle_drddisallowed directions to toggle
town_idthe town that is building the road (TownID::Invalid() if not applicable)
Returns
the cost of this operation or an error

Definition at line 609 of file road_cmd.cpp.

References _current_company, _settings_game, CommandCost::AddCost(), AXIS_X, AXIS_Y, AxisToRoadBits(), AxisToTrack(), ConstructionSettings::build_on_slopes, Town::cache, CalcClosestTownFromTile(), CheckOwnership(), CheckRoadSlope(), CheckTileOwnership(), CMD_ERROR, ComplementRoadBits(), GameSettings::construction, CountBits(), ConstructionSettings::crossing_with_competitor, DiagDirToRoadBits(), DirtyCompanyInfrastructureWindows(), DistanceSquare(), DRD_NONE, EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), GetAnyRoadBits(), CommandCost::GetCost(), GetCrossingRoadAxis(), GetCrossingRoadBits(), GetDisallowedRoadDirections(), GetDriveThroughStopAxis(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::GetIfValid(), GetOtherTunnelBridgeEnd(), GetRailReservationTrackBits(), GetRailTileType(), GetRailType(), GetRoadBits(), GetRoadFoundation(), GetRoadOwner(), GetRoadTileType(), GetTileOwner(), GetTileSlope(), GetTileType(), GetTrackBits(), GetTunnelBridgeDirection(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), HasBit(), HasExactlyOneBit(), HasPowerOnRoad(), HasRoadWorks(), HasTileRoadType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Company::infrastructure, INVALID_ROADTYPE, IsBridge(), IsDriveThroughStopTile(), IsNormalRoad(), IsNormalRoadTile(), IsSteepSlope(), IsStraightRoad(), IsTileType(), IsValidDisallowedRoadDirections(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::IsValidID(), IsValidRoadBits(), LEVELCROSSING_TRACKBIT_FACTOR, MakeRoadCrossing(), MakeRoadNormal(), MarkBridgeDirty(), MarkDirtyAdjacentLevelCrossingTiles(), MarkTileDirtyByTile(), MirrorRoadBits(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, OtherAxis(), OWNER_DEITY, OWNER_NONE, OWNER_TOWN, CompanyInfrastructure::rail, RAIL_TILE_NORMAL, RailNoLevelCrossings(), ROAD_NONE, ROAD_TILE_CROSSING, ROAD_TILE_DEPOT, ROAD_TILE_NORMAL, ROAD_X, ROAD_Y, RoadBuildCost(), RoadNoLevelCrossing(), SetCrossingReservation(), SetDisallowedRoadDirections(), SetRoadBits(), SetRoadOwner(), SetRoadType(), SetTownIndex(), TownCache::squared_town_zone_radius, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRACK_BIT_X, TRACK_BIT_Y, TRANSPORT_ROAD, TUNNELBRIDGE_TRACKBIT_FACTOR, TunnelBridgeIsFree(), UpdateCompanyRoadInfrastructure(), UpdateLevelCrossing(), VALID_LEVEL_CROSSING_SLOPES, ValParamRoadType(), Town::xy, and YapfNotifyTrackLayoutChange().

◆ CmdBuildRoadDepot()

◆ CmdConvertRoad()

CommandCost CmdConvertRoad ( DoCommandFlags  flags,
TileIndex  tile,
TileIndex  area_start,
RoadType  to_type 
)

Convert one road subtype to another.

Not meant to convert from road to tram.

Parameters
flagsoperation to perform
tileend tile of road conversion drag
area_startstart tile of drag
to_typenew roadtype to convert to.
Returns
the cost of this operation or an error

Definition at line 2443 of file road_cmd.cpp.

References _current_company, _settings_game, CommandCost::AddCost(), CanConvertUnownedRoadType(), CheckforTownRating(), CheckOwnership(), ClosestTownFromTile(), CMD_ERROR, ConvertRoadTypeOwner(), CountBits(), EconomySettings::dist_local_authority, GameSettings::economy, EnsureNoVehicleOnGround(), Execute, EXPENSES_CONSTRUCTION, CommandCost::Failed(), FindVehicleOnPos(), GetAnyRoadBits(), GetEncodedStringWithArgs(), GetOtherTunnelBridgeEnd(), GetParamsForOwnedBy(), GetRoadOwner(), GetTileType(), GetTunnelBridgeLength(), GetTunnelBridgeTransportType(), HasPowerOnRoad(), INVALID_ROADTYPE, INVALID_TILE, InvalidateWindowData(), IsAnyRoadStop(), IsBayRoadStopTile(), IsBridge(), IsLevelCrossing(), IsLocalCompany(), IsRoadDepot(), IsRoadDepotTile(), CommandCost::MakeError(), MarkBridgeDirty(), MarkTileDirtyByTile(), MayHaveRoad(), MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, OWNER_TOWN, ROAD_DEPOT_TRACKBIT_FACTOR, ROAD_REMOVE, ROAD_STOP_TRACKBIT_FACTOR, RoadConvertCost(), RoadNoLevelCrossing(), CommandCost::SetEncodedMessage(), SetRoadType(), SetTunnelBridgeOwner(), Map::Size(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TRANSPORT_ROAD, TUNNELBRIDGE_REMOVE, TUNNELBRIDGE_TRACKBIT_FACTOR, TunnelBridgeIsFree(), UpdateRoadVehPowerProc(), ValParamRoadType(), WC_BUILD_VEHICLE, and WC_VEHICLE_DEPOT.

◆ CmdRemoveLongRoad()

std::tuple< CommandCost, Money > CmdRemoveLongRoad ( DoCommandFlags  flags,
TileIndex  end_tile,
TileIndex  start_tile,
RoadType  rt,
Axis  axis,
bool  start_half,
bool  end_half 
)

Remove a long piece of road.

Parameters
flagsoperation to perform
end_tileend tile of drag
start_tilestart tile of drag
rtroad type
axisdirection
start_halfstart tile starts in the 2nd half of tile
end_halfend tile starts in the 2nd half of tile (p2 & 2)
Returns
the cost of this operation or an error

Definition at line 1074 of file road_cmd.cpp.

References CommandCost::AddCost(), AXIS_X, AXIS_Y, AxisToRoadBits(), CMD_ERROR, Execute, EXPENSES_CONSTRUCTION, GetAvailableMoneyForCommand(), CommandCost::GetCost(), CommandCost::GetErrorMessage(), IsValidAxis(), RemoveRoad(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Reset(), ROAD_NE, ROAD_NW, ROAD_SE, ROAD_SW, Map::Size(), CommandCost::Succeeded(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TileOffsByAxis(), TileX(), TileY(), and ValParamRoadType().

◆ DrawRoadDepotSprite()

void DrawRoadDepotSprite ( int  x,
int  y,
DiagDirection  dir,
RoadType  rt 
)

◆ UpdateNearestTownForRoadTiles()

void UpdateNearestTownForRoadTiles ( bool  invalidate)

Updates cached nearest town for all road tiles.

Parameters
invalidateare we just invalidating cached data?
Precondition
invalidate == true implies _generating_world == true

Definition at line 1916 of file road_cmd.cpp.

References _generating_world, CalcClosestTownFromTile(), HasTownOwnedRoad(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, IsRoadDepot(), IsTileType(), Map::Iterate(), MP_ROAD, and SetTownIndex().

Referenced by AfterLoadGame(), CmdFoundTown(), FoundTownWindow::OnClick(), and Town::PostDestructor().

Variable Documentation

◆ CcBuildRoadTunnel

CommandCallback CcBuildRoadTunnel

Definition at line 35 of file road_cmd.h.

◆ CcPlaySound_CONSTRUCTION_OTHER

CommandCallback CcPlaySound_CONSTRUCTION_OTHER

Definition at line 34 of file road_cmd.h.