OpenTTD Source  20241108-master-g80f628063a
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 
23 inline bool IsTunnel(Tile t)
24 {
25  assert(IsTileType(t, MP_TUNNELBRIDGE));
26  return !HasBit(t.m5(), 7);
27 }
28 
34 inline bool IsTunnelTile(Tile t)
35 {
36  return IsTileType(t, MP_TUNNELBRIDGE) && IsTunnel(t);
37 }
38 
40 bool IsTunnelInWay(TileIndex, int z);
41 bool IsTunnelInWayDir(TileIndex tile, int z, DiagDirection dir);
42 
50 inline 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 */
constexpr debug_inline 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 uint8_t & m7()
Primarily used for newgrf support.
Definition: map_func.h:185
debug_inline uint8_t & m5()
General purpose.
Definition: map_func.h:161
debug_inline uint8_t & m4()
General purpose.
Definition: map_func.h:149
debug_inline uint16_t & m2()
Primarily used for indices to towns, industries and stations.
Definition: map_func.h:125
debug_inline uint8_t & m6()
General purpose.
Definition: map_func.h:173
debug_inline uint8_t & m3()
General purpose.
Definition: map_func.h:137
Owner
Enum for all companies/owners.
Definition: company_type.h:18
@ OWNER_TOWN
A town owns the tile, or a town is expanding.
Definition: company_type.h:24
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?
Definition: tunnel_map.cpp:68
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.
Definition: tunnel_map.cpp:22
bool IsTunnelInWayDir(TileIndex tile, int z, DiagDirection dir)
Is there a tunnel in the way in the given direction?
Definition: tunnel_map.cpp:48