tunnel_map.h
author KUDr
Sun, 31 Dec 2006 02:53:23 +0000
branchcustombridgeheads
changeset 5611 11da6bafbfb9
parent 5592 fd60d4ecc921
permissions -rw-r--r--
(svn r7687) [cbh] - Fix: trains can now enter the bridge from side. They still can't leave it from side (pathfinder will need to be invoked when the other ramp is entered). Also the code is not very clear and needs review. It is more proof of concept than final solution. I hope that somebody smarter (Celestar) can do it better.
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     1
/* $Id$ */
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     2
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     3
#ifndef TUNNEL_MAP_H
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     4
#define TUNNEL_MAP_H
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     5
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     6
#include "direction.h"
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     7
#include "macros.h"
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     8
#include "map.h"
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
     9
#include "rail.h"
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    10
5591
8cd83b10634f (svn r7598) [cbh] - Codechange: Remove the functions IsTunnel() and IsBridge() as they are no longer needed.
celestar
parents: 5590
diff changeset
    11
static inline bool IsTunnelTile(TileIndex t)
3184
7405329343ce (svn r3830) Move IsTunnelTile() from tile.h to tunnel_map.h and add IsTunnel(), which just checks for a tunnel, but not the tile type as IsTunnelTile() does
tron
parents: 3156
diff changeset
    12
{
5590
dc34c43fc3eb (svn r7597) [cbh] - Codechange: Remove MP_TUNNELBRIDGE and introduce three new TileTypes: MP_TUNNEL, MP_STREET_BRIDGE, MP_RAILWAY_BRIDGE
celestar
parents: 4666
diff changeset
    13
	return IsTileType(t, MP_TUNNEL);
3184
7405329343ce (svn r3830) Move IsTunnelTile() from tile.h to tunnel_map.h and add IsTunnel(), which just checks for a tunnel, but not the tile type as IsTunnelTile() does
tron
parents: 3156
diff changeset
    14
}
7405329343ce (svn r3830) Move IsTunnelTile() from tile.h to tunnel_map.h and add IsTunnel(), which just checks for a tunnel, but not the tile type as IsTunnelTile() does
tron
parents: 3156
diff changeset
    15
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    16
static inline DiagDirection GetTunnelDirection(TileIndex t)
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    17
{
3369
00c2ca209a89 (svn r4166) Sprinkle several map accessors with assert()s
tron
parents: 3184
diff changeset
    18
	assert(IsTunnelTile(t));
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    19
	return (DiagDirection)GB(_m[t].m5, 0, 2);
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    20
}
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    21
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    22
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    23
static inline TransportType GetTunnelTransportType(TileIndex t)
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    24
{
3369
00c2ca209a89 (svn r4166) Sprinkle several map accessors with assert()s
tron
parents: 3184
diff changeset
    25
	assert(IsTunnelTile(t));
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    26
	return (TransportType)GB(_m[t].m5, 2, 2);
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    27
}
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    28
5592
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    29
static inline bool HasTunnelSnowOrDesert(TileIndex t)
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    30
{
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    31
	assert(IsTunnelTile(t));
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    32
	return HASBIT(_m[t].m4, 7);
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    33
}
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    34
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    35
static inline void SetTunnelSnowOrDesert(TileIndex t, bool snow_or_desert)
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    36
{
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    37
	assert(IsTunnelTile(t));
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    38
	SB(_m[t].m4, 7, 1, snow_or_desert);
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    39
}
fd60d4ecc921 (svn r7608) [cbh] - Merge with trunk r7593:7607 because I need 7607 here
celestar
parents: 5591
diff changeset
    40
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    41
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    42
TileIndex GetOtherTunnelEnd(TileIndex);
3156
028b6756b279 (svn r3779) Move CheckTunnelInWay() to a more appropriate place, invert its result and give it a less ambiguous name (IsTunnelInWay)
tron
parents: 3154
diff changeset
    43
bool IsTunnelInWay(TileIndex, uint z);
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    44
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    45
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    46
static inline void MakeRoadTunnel(TileIndex t, Owner o, DiagDirection d)
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    47
{
5590
dc34c43fc3eb (svn r7597) [cbh] - Codechange: Remove MP_TUNNELBRIDGE and introduce three new TileTypes: MP_TUNNEL, MP_STREET_BRIDGE, MP_RAILWAY_BRIDGE
celestar
parents: 4666
diff changeset
    48
	SetTileType(t, MP_TUNNEL);
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    49
	SetTileOwner(t, o);
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    50
	_m[t].m2 = 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    51
	_m[t].m3 = 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    52
	_m[t].m4 = 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    53
	_m[t].m5 = TRANSPORT_ROAD << 2 | d;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    54
}
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    55
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    56
static inline void MakeRailTunnel(TileIndex t, Owner o, DiagDirection d, RailType r)
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    57
{
5590
dc34c43fc3eb (svn r7597) [cbh] - Codechange: Remove MP_TUNNELBRIDGE and introduce three new TileTypes: MP_TUNNEL, MP_STREET_BRIDGE, MP_RAILWAY_BRIDGE
celestar
parents: 4666
diff changeset
    58
	SetTileType(t, MP_TUNNEL);
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    59
	SetTileOwner(t, o);
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    60
	_m[t].m2 = 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    61
	_m[t].m3 = r;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    62
	_m[t].m4 = 0;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    63
	_m[t].m5 = TRANSPORT_RAIL << 2 | d;
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    64
}
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents:
diff changeset
    65
4666
850b5b6e4bac (svn r6560) - Codechange: Minor fix; add missing #include guards and comments, and correct svn properties on bmp.[ch]
peter1138
parents: 3369
diff changeset
    66
#endif /* TUNNEL_MAP_H */