OpenTTD Source 20241224-master-gf74b0cf984
tunnel_map.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 TUNNEL_MAP_H
11#define TUNNEL_MAP_H
12
13#include "rail_map.h"
14#include "road_map.h"
15
16
23inline bool IsTunnel(Tile t)
24{
25 assert(IsTileType(t, MP_TUNNELBRIDGE));
26 return !HasBit(t.m5(), 7);
27}
28
34inline bool IsTunnelTile(Tile t)
35{
36 return IsTileType(t, MP_TUNNELBRIDGE) && IsTunnel(t);
37}
38
40bool IsTunnelInWay(TileIndex, int z);
41bool IsTunnelInWayDir(TileIndex tile, int z, DiagDirection dir);
42
50inline void MakeRoadTunnel(Tile t, Owner o, DiagDirection d, RoadType road_rt, RoadType tram_rt)
51{
53 SetTileOwner(t, o);
54 t.m2() = 0;
55 t.m3() = 0;
56 t.m4() = 0;
57 t.m5() = TRANSPORT_ROAD << 2 | d;
58 SB(t.m6(), 2, 4, 0);
59 t.m7() = 0;
60 t.m8() = 0;
61 SetRoadOwner(t, RTT_ROAD, o);
62 if (o != OWNER_TOWN) SetRoadOwner(t, RTT_TRAM, o);
63 SetRoadTypes(t, road_rt, tram_rt);
64}
65
74{
76 SetTileOwner(t, o);
77 t.m2() = 0;
78 t.m3() = 0;
79 t.m4() = 0;
80 t.m5() = TRANSPORT_RAIL << 2 | d;
81 SB(t.m6(), 2, 4, 0);
82 t.m7() = 0;
83 t.m8() = 0;
84 SetRailType(t, r);
86}
87
88#endif /* TUNNEL_MAP_H */
debug_inline constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr T SB(T &x, const uint8_t s, const uint8_t n, const U d)
Set n bits in x starting at bit s to d.
Wrapper class to abstract away the way the tiles are stored.
Definition map_func.h:25
debug_inline uint16_t & m8()
General purpose.
Definition map_func.h:197
debug_inline uint16_t & m2()
Primarily used for indices to towns, industries and stations.
Definition map_func.h:125
debug_inline uint8_t & m7()
Primarily used for newgrf support.
Definition map_func.h:185
debug_inline uint8_t & m4()
General purpose.
Definition map_func.h:149
debug_inline uint8_t & m6()
General purpose.
Definition map_func.h:173
debug_inline uint8_t & m3()
General purpose.
Definition map_func.h:137
debug_inline uint8_t & m5()
General purpose.
Definition map_func.h:161
Owner
Enum for all companies/owners.
@ OWNER_TOWN
A town owns the tile, or a town is expanding.
DiagDirection
Enumeration for diagonal directions.
Hides the direct accesses to the map array with map accessors.
void SetRailType(Tile t, RailType r)
Sets the rail type of the given tile.
Definition rail_map.h:125
RailType
Enumeration for all possible railtypes.
Definition rail_type.h:27
Map accessors for roads.
void SetRoadOwner(Tile t, RoadTramType rtt, Owner o)
Set the owner of a specific road type.
Definition road_map.h:251
void SetRoadTypes(Tile t, RoadType road_rt, RoadType tram_rt)
Set the present road types of a tile.
Definition road_map.h:619
RoadType
The different roadtypes we support.
Definition road_type.h:25
@ INVALID_ROADTYPE
flag for invalid roadtype
Definition road_type.h:30
void SetTileType(Tile tile, TileType type)
Set the type of a tile.
Definition tile_map.h:131
void SetTileOwner(Tile tile, Owner owner)
Sets the owner of a tile.
Definition tile_map.h:198
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
Definition tile_map.h:150
@ MP_TUNNELBRIDGE
Tunnel entry/exit and bridge heads.
Definition tile_type.h:57
@ TRANSPORT_RAIL
Transport by train.
@ TRANSPORT_ROAD
Transport by road vehicle.
void MakeRailTunnel(Tile t, Owner o, DiagDirection d, RailType r)
Makes a rail tunnel entrance.
Definition tunnel_map.h:73
bool IsTunnelInWay(TileIndex, int z)
Is there a tunnel in the way in any direction?
bool IsTunnelTile(Tile t)
Is this a tunnel (entrance)?
Definition tunnel_map.h:34
bool IsTunnel(Tile t)
Is this a tunnel (entrance)?
Definition tunnel_map.h:23
void MakeRoadTunnel(Tile t, Owner o, DiagDirection d, RoadType road_rt, RoadType tram_rt)
Makes a road tunnel entrance.
Definition tunnel_map.h:50
TileIndex GetOtherTunnelEnd(TileIndex)
Gets the other end of the tunnel.
bool IsTunnelInWayDir(TileIndex tile, int z, DiagDirection dir)
Is there a tunnel in the way in the given direction?