OpenTTD Source 20250205-master-gfd85ab1e2c
|
Command Handling for waypoints. More...
#include "stdafx.h"
#include "command_func.h"
#include "landscape.h"
#include "bridge_map.h"
#include "town.h"
#include "waypoint_base.h"
#include "pathfinder/yapf/yapf_cache.h"
#include "pathfinder/water_regions.h"
#include "strings_func.h"
#include "viewport_func.h"
#include "viewport_kdtree.h"
#include "window_func.h"
#include "timer/timer_game_calendar.h"
#include "vehicle_func.h"
#include "string_func.h"
#include "company_func.h"
#include "newgrf_station.h"
#include "newgrf_roadstop.h"
#include "company_base.h"
#include "water.h"
#include "company_gui.h"
#include "waypoint_cmd.h"
#include "landscape_cmd.h"
#include "table/strings.h"
#include "safeguards.h"
Go to the source code of this file.
Functions | |
static Waypoint * | FindDeletedWaypointCloseTo (TileIndex tile, StringID str, CompanyID cid, bool is_road) |
Find a deleted waypoint close to a tile. | |
Axis | GetAxisForNewRailWaypoint (TileIndex tile) |
Get the axis for a new rail waypoint. | |
Axis | GetAxisForNewRoadWaypoint (TileIndex tile) |
Get the axis for a new road waypoint. | |
CommandCost | ClearTile_Station (TileIndex tile, DoCommandFlag flags) |
Clear a single tile of a station. | |
static CommandCost | IsValidTileForWaypoint (TileIndex tile, Axis axis, StationID *waypoint) |
Check whether the given tile is suitable for a waypoint. | |
void | GetStationLayout (uint8_t *layout, uint numtracks, uint plat_len, const StationSpec *statspec) |
Create the station layout for the given number of tracks and platform length. | |
CommandCost | FindJoiningWaypoint (StationID existing_station, StationID station_to_join, bool adjacent, TileArea ta, Waypoint **wp, bool is_road) |
Find a nearby waypoint that joins this waypoint. | |
CommandCost | CanExpandRailStation (const BaseStation *st, TileArea &new_ta) |
Check whether we can expand the rail part of the given station. | |
CommandCost | CalculateRoadStopCost (TileArea tile_area, DoCommandFlag flags, bool is_drive_through, StationType station_type, Axis axis, DiagDirection ddir, StationID *est, RoadType rt, Money unit_cost) |
Calculates cost of new road stops within the area. | |
CommandCost | RemoveRoadWaypointStop (TileIndex tile, DoCommandFlag flags, int replacement_spec_index) |
Remove a road waypoint. | |
CommandCost | CmdBuildRailWaypoint (DoCommandFlag flags, TileIndex start_tile, Axis axis, uint8_t width, uint8_t height, StationClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) |
Convert existing rail to waypoint. | |
CommandCost | CmdBuildRoadWaypoint (DoCommandFlag flags, TileIndex start_tile, Axis axis, uint8_t width, uint8_t height, RoadStopClassID spec_class, uint16_t spec_index, StationID station_to_join, bool adjacent) |
Build a road waypoint on an existing road. | |
CommandCost | CmdBuildBuoy (DoCommandFlag flags, TileIndex tile) |
Build a buoy. | |
CommandCost | RemoveBuoy (TileIndex tile, DoCommandFlag flags) |
Remove a buoy. | |
static bool | IsUniqueWaypointName (const std::string &name) |
Check whether the name is unique amongst the waypoints. | |
CommandCost | CmdRenameWaypoint (DoCommandFlag flags, StationID waypoint_id, const std::string &text) |
Rename a waypoint. | |
Command Handling for waypoints.
Definition in file waypoint_cmd.cpp.
|
extern |
Calculates cost of new road stops within the area.
tile_area | Area to check. |
flags | Operation to perform. |
is_drive_through | True if trying to build a drive-through station. |
station_type | Station type (bus, truck or road waypoint). |
axis | Axis of a drive-through road stop. |
ddir | Entrance direction (DiagDirection) for normal stops. Converted to the axis for drive-through stops. |
station | StationID to be queried and returned if available. |
rt | Road type to build, may be INVALID_ROADTYPE if an existing road is required. |
unit_cost | The cost to build one road stop of the current type. |
Definition at line 1919 of file station_cmd.cpp.
References CommandCost::AddCost(), AxisToDiagDir(), CheckFlatLandRoadStop(), EXPENSES_CONSTRUCTION, CommandCost::Failed(), IsAnyRoadStop(), IsTileType(), MP_STATION, ReverseDiagDir(), and SetBit().
Referenced by CmdBuildRoadStop(), and CmdBuildRoadWaypoint().
|
extern |
Check whether we can expand the rail part of the given station.
st | the station to expand |
new_ta | the current (and if all is fine new) tile area of the rail part of the station |
Definition at line 1081 of file station_cmd.cpp.
References _settings_game, OrthogonalTileArea::h, GameSettings::station, StationSettings::station_spread, OrthogonalTileArea::tile, TileX(), TileXY(), TileY(), BaseStation::train_station, and OrthogonalTileArea::w.
Referenced by CmdBuildRailStation(), and CmdBuildRailWaypoint().
|
extern |
Clear a single tile of a station.
tile | The tile to clear. |
flags | The DoCommand flags related to the "command". |
Definition at line 4698 of file station_cmd.cpp.
References CanRemoveRoadWithStop(), CMD_ERROR, DC_AUTO, CommandCost::Failed(), GetStationType(), HasTileRoadType(), IsDriveThroughStopTile(), RemoveAirport(), RemoveBuoy(), RemoveDock(), RemoveRailStation(), RemoveRailWaypoint(), RemoveRoadStop(), RemoveRoadWaypointStop(), and SetDParam().
Referenced by CheckFlatLandRailStation(), CheckFlatLandRoadStop(), and IsValidTileForWaypoint().
CommandCost CmdBuildBuoy | ( | DoCommandFlag | flags, |
TileIndex | tile | ||
) |
Build a buoy.
flags | operation to perform |
tile | tile where to place the buoy |
Definition at line 468 of file waypoint_cmd.cpp.
References CommandCost::AddCost(), BaseStation::build_date, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::CanAllocateItem(), CheckForDockingTile(), ClearNeighbourNonFloodingStates(), TimerGameCalendar::date, DC_AUTO, DC_EXEC, EXPENSES_CONSTRUCTION, FACIL_DOCK, BaseStation::facilities, CommandCost::Failed(), FindDeletedWaypointCloseTo(), GetWaterClass(), HasTileWaterGround(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), IsBridgeAbove(), IsTileFlat(), IsWaterTile(), MakeBuoy(), MakeDefaultName(), MarkTileDirtyByTile(), BaseStation::owner, OWNER_NONE, BaseStation::rect, BaseStation::string_id, BaseStation::town, Waypoint::UpdateVirtCoord(), WC_WAYPOINT_VIEW, and BaseStation::xy.
CommandCost CmdBuildRailWaypoint | ( | DoCommandFlag | flags, |
TileIndex | start_tile, | ||
Axis | axis, | ||
uint8_t | width, | ||
uint8_t | height, | ||
StationClassID | spec_class, | ||
uint16_t | spec_index, | ||
StationID | station_to_join, | ||
bool | adjacent | ||
) |
Convert existing rail to waypoint.
Eg build a waypoint station over piece of rail
flags | type of operation |
start_tile | northern most tile where waypoint will be built |
axis | orientation (Axis) |
width | width of waypoint |
height | height of waypoint |
spec_class | custom station class |
spec_index | custom station id |
station_to_join | station ID to join (NEW_STATION if build new one) |
adjacent | allow waypoints directly adjacent to other waypoints. |
Definition at line 203 of file waypoint_cmd.cpp.
References _current_company, _settings_game, CommandCost::AddCost(), AllocateSpecToStation(), AXIS_X, AxisToTrack(), BaseStation::build_date, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::CanAllocateItem(), CanExpandRailStation(), CMD_ERROR, TimerGameCalendar::date, DC_EXEC, DeallocateSpecFromStation(), BaseStation::delete_ctr, DirtyCompanyInfrastructureWindows(), StationSettings::distant_join_stations, EXPENSES_CONSTRUCTION, FACIL_TRAIN, BaseStation::facilities, CommandCost::Failed(), FindDeletedWaypointCloseTo(), FindJoiningWaypoint(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), NewGRFClass< Tspec, Tindex, Tmax >::Get(), NewGRFClass< Tspec, Tindex, Tmax >::GetClassCount(), GetCustomStationSpecIndex(), GetRailReservationTrackBits(), GetRailType(), NewGRFClass< Tspec, Tindex, Tmax >::GetSpec(), NewGRFClass< Tspec, Tindex, Tmax >::GetSpecCount(), GetStationLayout(), GetTileOwner(), HasBit(), HasStationReservation(), HasStationTileRail(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Company::infrastructure, INVALID_TILE, BaseStation::IsInUse(), IsRailWaypointTile(), IsTileType(), IsValidAxis(), SpecializedStation< Waypoint, true >::IsValidID(), IsValidTileForWaypoint(), IsWaypointClass(), MakeDefaultName(), MakeRailWaypoint(), MarkTileDirtyByTile(), MP_RAILWAY, OtherAxis(), BaseStation::owner, BaseStation::rect, SetCustomStationSpecIndex(), SetRailStationReservation(), SetRailStationTileFlags(), CompanyInfrastructure::station, GameSettings::station, StationSettings::station_spread, BaseStation::string_id, OrthogonalTileArea::tile, TileOffsByAxis(), BaseStation::town, BaseStation::train_station, Waypoint::UpdateVirtCoord(), BaseStation::xy, and YapfNotifyTrackLayoutChange().
CommandCost CmdBuildRoadWaypoint | ( | DoCommandFlag | flags, |
TileIndex | start_tile, | ||
Axis | axis, | ||
uint8_t | width, | ||
uint8_t | height, | ||
RoadStopClassID | spec_class, | ||
uint16_t | spec_index, | ||
StationID | station_to_join, | ||
bool | adjacent | ||
) |
Build a road waypoint on an existing road.
flags | type of operation. |
start_tile | northern most tile where waypoint will be built. |
axis | orientation (Axis). |
width | width of waypoint. |
height | height of waypoint. |
spec_class | custom road stop class. |
spec_index | custom road stop id. |
station_to_join | station ID to join (NEW_STATION if build new one). |
adjacent | allow waypoints directly adjacent to other waypoints. |
Definition at line 335 of file waypoint_cmd.cpp.
References _current_company, _settings_game, OrthogonalTileArea::Add(), AXIS_X, AxisToDiagDir(), BaseStation::build_date, BaseStation::cached_roadstop_anim_triggers, CalculateRoadStopCost(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_station_pool >::CanAllocateItem(), CMD_ERROR, CountBits(), TimerGameCalendar::date, DC_EXEC, BaseStation::delete_ctr, DirtyCompanyInfrastructureWindows(), StationSettings::distant_join_stations, FACIL_BUS_STOP, FACIL_TRUCK_STOP, BaseStation::facilities, CommandCost::Failed(), FindDeletedWaypointCloseTo(), FindJoiningWaypoint(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), NewGRFClass< Tspec, Tindex, Tmax >::Get(), RoadStopSpec::GetBuildCost(), NewGRFClass< Tspec, Tindex, Tmax >::GetClassCount(), GetRoadBits(), GetRoadOwner(), NewGRFClass< Tspec, Tindex, Tmax >::GetSpec(), NewGRFClass< Tspec, Tindex, Tmax >::GetSpecCount(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_ROADTYPE, BaseStation::IsInUse(), IsNormalRoadTile(), IsRoadWaypointTile(), IsValidAxis(), SpecializedStation< Waypoint, true >::IsValidID(), IsWaypointClass(), MakeDefaultName(), MakeDriveThroughRoadStop(), MarkTileDirtyByTile(), MayHaveRoad(), OtherAxis(), BaseStation::owner, BaseStation::rect, RemoveRoadWaypointStop(), ROAD_STOP_TRACKBIT_FACTOR, Waypoint::road_waypoint_area, SetBit(), SetCustomRoadStopSpecIndex(), GameSettings::station, StationSettings::station_spread, BaseStation::string_id, TileOffsByAxis(), BaseStation::town, AnimationInfo::triggers, UpdateCompanyRoadInfrastructure(), Waypoint::UpdateVirtCoord(), Waypoint::waypoint_flags, WPF_ROAD, and BaseStation::xy.
CommandCost CmdRenameWaypoint | ( | DoCommandFlag | flags, |
StationID | waypoint_id, | ||
const std::string & | text | ||
) |
Rename a waypoint.
flags | type of operation |
waypoint_id | id of waypoint |
text | the new name or an empty string when resetting to the default |
Definition at line 578 of file waypoint_cmd.cpp.
References CheckOwnership(), CMD_ERROR, DC_EXEC, CommandCost::Failed(), SpecializedStation< Waypoint, true >::GetIfValid(), IsUniqueWaypointName(), MAX_LENGTH_STATION_NAME_CHARS, BaseStation::name, BaseStation::owner, OWNER_NONE, Waypoint::UpdateVirtCoord(), and Utf8StringLength().
|
static |
Find a deleted waypoint close to a tile.
tile | to search from |
str | the string to get the 'type' of |
cid | previous owner of the waypoint |
is_road | whether to find a road waypoint |
Definition at line 75 of file waypoint_cmd.cpp.
References DistanceManhattan(), HasBit(), SpecializedStation< Waypoint, true >::Iterate(), and WPF_ROAD.
Referenced by CmdBuildBuoy(), CmdBuildRailWaypoint(), and CmdBuildRoadWaypoint().
|
extern |
Find a nearby waypoint that joins this waypoint.
existing_waypoint | an existing waypoint we build over |
waypoint_to_join | the waypoint to join to |
adjacent | whether adjacent waypoints are allowed |
ta | the area of the newly build waypoint |
wp | 'return' pointer for the found waypoint |
is_road | whether to find a road waypoint |
Definition at line 1222 of file station_cmd.cpp.
References HasBit(), Waypoint::waypoint_flags, and WPF_ROAD.
Referenced by CmdBuildRailWaypoint(), and CmdBuildRoadWaypoint().
Get the axis for a new rail waypoint.
This means that if it is a valid tile to build a waypoint on it returns a valid Axis, otherwise an invalid one.
tile | the tile to look at. |
Definition at line 101 of file waypoint_cmd.cpp.
References AXIS_X, AXIS_Y, GetRailStationAxis(), GetRailTileType(), GetTrackBits(), INVALID_AXIS, IsRailWaypointTile(), IsTileType(), MP_RAILWAY, RAIL_TILE_NORMAL, TRACK_BIT_X, and TRACK_BIT_Y.
Referenced by IsValidTileForWaypoint(), and PlaceRail_Waypoint().
Get the axis for a new road waypoint.
This means that if it is a valid tile to build a waypoint on it returns a valid Axis, otherwise an invalid one.
tile | the tile to look at. |
Definition at line 123 of file waypoint_cmd.cpp.
References AXIS_X, AXIS_Y, GetAllRoadBits(), GetDriveThroughStopAxis(), INVALID_AXIS, IsNormalRoadTile(), IsRoadWaypointTile(), ROAD_X, and ROAD_Y.
Referenced by PlaceRoad_Waypoint().
|
extern |
Create the station layout for the given number of tracks and platform length.
layout | The layout to write to. |
numtracks | The number of tracks to write. |
plat_len | The length of the platforms. |
statspec | The specification of the station to (possibly) get the layout from. |
Definition at line 1126 of file station_cmd.cpp.
References GetStationLayoutKey(), and StationSpec::layouts.
Referenced by CmdBuildRailStation(), and CmdBuildRailWaypoint().
|
static |
Check whether the name is unique amongst the waypoints.
name | The name to check. |
Definition at line 562 of file waypoint_cmd.cpp.
References SpecializedStation< Waypoint, true >::Iterate().
Referenced by CmdRenameWaypoint().
|
static |
Check whether the given tile is suitable for a waypoint.
tile | the tile to check for suitability |
axis | the axis of the waypoint |
waypoint | Waypoint the waypoint to check for is already joined to. If we find another waypoint it can join to it will throw an error. |
Definition at line 147 of file waypoint_cmd.cpp.
References _settings_game, ConstructionSettings::build_on_slopes, CheckOwnership(), ClearTile_Station(), GameSettings::construction, DC_AUTO, EnsureNoVehicleOnGround(), CommandCost::Failed(), GetAxisForNewRailWaypoint(), GetStationIndex(), GetTileOwner(), GetTileSlope(), IsBridgeAbove(), IsRailWaypoint(), IsSteepSlope(), IsTileType(), MP_STATION, SLOPE_FLAT, and CommandCost::Succeeded().
Referenced by CmdBuildRailWaypoint().
CommandCost RemoveBuoy | ( | TileIndex | tile, |
DoCommandFlag | flags | ||
) |
Remove a buoy.
tile | TileIndex been queried |
flags | operation to perform |
Definition at line 524 of file waypoint_cmd.cpp.
References _current_company, DC_BANKRUPT, DC_EXEC, BaseStation::delete_ctr, EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, BaseStation::facilities, CommandCost::Failed(), BaseStation::GetByTile(), GetTileOwner(), HasStationInUse(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_STRING_ID, InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), BaseStation::rect, Waypoint::UpdateVirtCoord(), and WC_WAYPOINT_VIEW.
Referenced by ClearTile_Station().
|
extern |
Remove a road waypoint.
tile | TileIndex been queried |
flags | operation to perform |
replacement_spec_index | replacement spec index to avoid deallocating, if < 0, tile is not being replaced |
Definition at line 2254 of file station_cmd.cpp.
References _current_company, CheckOwnership(), DC_BANKRUPT, DC_EXEC, DeleteNewGRFInspectWindow(), DeleteStationIfEmpty(), DirtyCompanyInfrastructureWindows(), EnsureNoVehicleOnGround(), EXPENSES_CONSTRUCTION, FACIL_BUS_STOP, FACIL_TRUCK_STOP, BaseStation::facilities, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), BaseStation::GetByTile(), RoadStopSpec::GetClearCost(), GetCustomRoadStopSpecIndex(), GetRoadOwner(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_TILE, BaseStation::owner, OWNER_WATER, BaseStation::rect, ROAD_STOP_TRACKBIT_FACTOR, Waypoint::road_waypoint_area, SetWindowWidgetDirty(), OrthogonalTileArea::tile, UpdateCompanyRoadInfrastructure(), Waypoint::UpdateVirtCoord(), WC_STATION_VIEW, and WID_SV_ROADVEHS.
Referenced by ClearTile_Station(), CmdBuildRoadWaypoint(), and RemoveGenericRoadStop().