OpenTTD Source: src/pathfinder/pathfinder_func.h Source File

OpenTTD Source 13.2.1

pathfinder_func.h
Go to the documentation of this file.
1 /*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10 #ifndef PATHFINDER_FUNC_H
11 #define PATHFINDER_FUNC_H
12
13 #include "../tile_cmd.h"
14 #include "../waypoint_base.h"
15
25 static inline TileIndex CalcClosestStationTile(StationID station, TileIndex tile, StationType station_type)
26 {
27 const BaseStation *st = BaseStation::Get(station);
28 TileArea ta;
29 st->GetTileArea(&ta, station_type);
30
31 /* If the rail station is (temporarily) not present, use the station sign to drive near the station */
32 if (ta.tile == INVALID_TILE) return st->xy;
33
34 uint minx = TileX(ta.tile); // topmost corner of station
35 uint miny = TileY(ta.tile);
36 uint maxx = minx + ta.w - 1; // lowermost corner of station
37 uint maxy = miny + ta.h - 1;
38
39 /* we are going the aim for the x coordinate of the closest corner
40 * but if we are between those coordinates, we will aim for our own x coordinate */
41 uint x = ClampU(TileX(tile), minx, maxx);
42
43 /* same for y coordinate, see above comment */
44 uint y = ClampU(TileY(tile), miny, maxy);
45
46 /* return the tile of our target coordinates */
47 return TileXY(x, y);
48 }
49
60 static inline TrackdirBits GetTrackdirBitsForRoad(TileIndex tile, RoadTramType rtt)
61 {
62 TrackdirBits bits = TrackStatusToTrackdirBits(GetTileTrackStatus(tile, TRANSPORT_ROAD, rtt));
63
64 if (rtt == RTT_TRAM && bits == TRACKDIR_BIT_NONE) {
65 if (IsNormalRoadTile(tile)) {
66 RoadBits rb = GetRoadBits(tile, RTT_TRAM);
67 switch (rb) {
68 case ROAD_NE:
69 case ROAD_SW:
70 bits = TRACKDIR_BIT_X_NE | TRACKDIR_BIT_X_SW;
71 break;
72
73 case ROAD_NW:
74 case ROAD_SE:
75 bits = TRACKDIR_BIT_Y_NW | TRACKDIR_BIT_Y_SE;
76 break;
77
78 default: break;
79 }
80 }
81 }
82
83 return bits;
84 }
85
86 #endif /* PATHFINDER_FUNC_H */
Pool::PoolItem<&_station_pool >::Get
static Titem * Get(size_t index)
Returns Titem with given index.
Definition: pool_type.hpp:337
TrackdirBits
TrackdirBits
Enumeration of bitmasks for the TrackDirs.
Definition: track_type.h:101
BaseStation::GetTileArea
virtual void GetTileArea(TileArea *ta, StationType type) const =0
Get the tile area for a given station type.
ClampU
static uint ClampU(const uint a, const uint min, const uint max)
Clamp an unsigned integer between an interval.
Definition: math_func.hpp:148
INVALID_TILE
static constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
Definition: tile_type.h:108
TileIndex
The index/ID of a Tile.
Definition: tile_type.h:85
TileY
static uint TileY(TileIndex tile)
Get the Y component of a tile.
Definition: map_func.h:215
TileX
static uint TileX(TileIndex tile)
Get the X component of a tile.
Definition: map_func.h:205
GetTileTrackStatus
TrackStatus GetTileTrackStatus(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
Returns information about trackdirs and signal states.
Definition: landscape.cpp:601
StationType
StationType
Station types.
Definition: station_type.h:32
GetRoadBits
static RoadBits GetRoadBits(TileIndex t, RoadTramType rtt)
Get the present road bits for a specific road type.
Definition: road_map.h:128
ROAD_NE
@ ROAD_NE
North-east part.
Definition: road_type.h:55
TRACKDIR_BIT_X_NE
@ TRACKDIR_BIT_X_NE
Track x-axis, direction north-east.
Definition: track_type.h:103
OrthogonalTileArea::w
uint16 w
The width of the area.
Definition: tilearea_type.h:20
OrthogonalTileArea
Represents the covered area of e.g.
Definition: tilearea_type.h:18
TRACKDIR_BIT_Y_SE
@ TRACKDIR_BIT_Y_SE
Track y-axis, direction south-east.
Definition: track_type.h:104
CalcClosestStationTile
static TileIndex CalcClosestStationTile(StationID station, TileIndex tile, StationType station_type)
Calculates the tile of given station that is closest to a given tile for this we assume the station i...
Definition: pathfinder_func.h:25
OrthogonalTileArea::h
uint16 h
The height of the area.
Definition: tilearea_type.h:21
GetTrackdirBitsForRoad
static TrackdirBits GetTrackdirBitsForRoad(TileIndex tile, RoadTramType rtt)
Wrapper around GetTileTrackStatus() and TrackStatusToTrackdirBits(), as for single tram bits GetTileT...
Definition: pathfinder_func.h:60
TRACKDIR_BIT_NONE
@ TRACKDIR_BIT_NONE
No track build.
Definition: track_type.h:102
TileXY
static TileIndex TileXY(uint x, uint y)
Returns the TileIndex of a coordinate.
Definition: map_func.h:163
TRACKDIR_BIT_Y_NW
@ TRACKDIR_BIT_Y_NW
Track y-axis, direction north-west.
Definition: track_type.h:111
OrthogonalTileArea::tile
TileIndex tile
The base tile of the area.
Definition: tilearea_type.h:19
TrackStatusToTrackdirBits
static TrackdirBits TrackStatusToTrackdirBits(TrackStatus ts)
Returns the present-trackdir-information of a TrackStatus.
Definition: track_func.h:351
BaseStation::xy
TileIndex xy
Base tile of the station.
Definition: base_station_base.h:53
BaseStation
Base class for all station-ish types.
Definition: base_station_base.h:52
RoadBits
RoadBits
Enumeration for the road parts on a tile.
Definition: road_type.h:50
ROAD_NW
@ ROAD_NW
North-west part.
Definition: road_type.h:52
ROAD_SW
@ ROAD_SW
South-west part.
Definition: road_type.h:53
ROAD_SE
@ ROAD_SE
South-east part.
Definition: road_type.h:54
IsNormalRoadTile
static bool IsNormalRoadTile(TileIndex t)
Return whether a tile is a normal road tile.
Definition: road_map.h:74
TRANSPORT_ROAD
@ TRANSPORT_ROAD
Transport by road vehicle.
Definition: transport_type.h:28
TRACKDIR_BIT_X_SW
@ TRACKDIR_BIT_X_SW
Track x-axis, direction south-west.
Definition: track_type.h:110