bridge_map.h
author tron
Wed, 15 Mar 2006 19:53:25 +0000
changeset 3218 68decfba698f
parent 3216 ac69372a0833
child 3225 655763f3861c
permissions -rw-r--r--
(svn r3891) Fix r3885
3189
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     1
/* $Id$ */
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     2
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     3
#ifndef BRIDGE_MAP_H
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     4
#define BRIDGE_MAP_H
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     5
3196
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
     6
#include "direction.h"
3189
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     7
#include "macros.h"
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     8
#include "map.h"
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
     9
#include "rail.h"
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    10
#include "tile.h"
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    11
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    12
3214
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    13
static inline bool IsBridgeRamp(TileIndex t)
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    14
{
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    15
	return !HASBIT(_m[t].m5, 6);
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    16
}
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    17
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    18
3196
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    19
/**
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    20
 * Get the direction pointing onto the bridge
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    21
 */
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    22
static inline DiagDirection GetBridgeRampDirection(TileIndex t)
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    23
{
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    24
	/* Heavy wizardry to convert the X/Y (bit 0) + N/S (bit 5) encoding of
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    25
	 * bridges to a DiagDirection
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    26
	 */
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    27
	return (DiagDirection)((6 - (_m[t].m5 >> 4 & 2) - (_m[t].m5 & 1)) % 4);
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    28
}
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    29
29717e930f9a (svn r3857) Add and use GetBridgeRampDirection()
tron
parents: 3189
diff changeset
    30
3216
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    31
static inline bool IsClearUnderBridge(TileIndex t)
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    32
{
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    33
	return GB(_m[t].m5, 3, 3) == 0;
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    34
}
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    35
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    36
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    37
static inline bool IsTransportUnderBridge(TileIndex t)
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    38
{
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    39
	return HASBIT(_m[t].m5, 5);
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    40
}
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    41
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    42
static inline TransportType GetTransportTypeUnderBridge(TileIndex t)
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    43
{
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    44
	return (TransportType)GB(_m[t].m5, 3, 2);
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    45
}
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    46
ac69372a0833 (svn r3889) Change a part of the bridge drawing code to make it more comprehensible and add the needed accessors
tron
parents: 3214
diff changeset
    47
3214
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    48
/**
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    49
 * Starting at one bridge end finds the other bridge end
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    50
 */
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    51
TileIndex GetOtherBridgeEnd(TileIndex);
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    52
172b409bf612 (svn r3887) Add a function to get the other bridge end when you're at a bridge ramp
tron
parents: 3209
diff changeset
    53
3189
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    54
static inline void SetClearUnderBridge(TileIndex t)
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    55
{
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    56
	SetTileOwner(t, OWNER_NONE);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    57
	SB(_m[t].m5, 3, 3, 0 << 2 | 0);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    58
}
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    59
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    60
static inline void SetWaterUnderBridge(TileIndex t)
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    61
{
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    62
	SetTileOwner(t, OWNER_WATER);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    63
	SB(_m[t].m5, 3, 3, 0 << 2 | 1);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    64
}
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    65
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    66
static inline void SetRailUnderBridge(TileIndex t, Owner o, RailType r)
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    67
{
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    68
	SetTileOwner(t, o);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    69
	SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_RAIL);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    70
	SB(_m[t].m3, 0, 4, r);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    71
}
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    72
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    73
static inline void SetRoadUnderBridge(TileIndex t, Owner o)
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    74
{
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    75
	SetTileOwner(t, o);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    76
	SB(_m[t].m5, 3, 3, 1 << 2 | TRANSPORT_ROAD);
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    77
}
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
    78
3209
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    79
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    80
static inline void MakeBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, TransportType tt)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    81
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    82
	uint northsouth = (d == DIAGDIR_NE || d == DIAGDIR_NW);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    83
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    84
	SetTileType(t, MP_TUNNELBRIDGE);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    85
	SetTileOwner(t, o);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    86
	_m[t].m2 = bridgetype << 4;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    87
	_m[t].m4 = 0;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    88
	_m[t].m5 = 1 << 7 | 0 << 6 | northsouth << 5 | tt << 1 | DiagDirToAxis(d);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    89
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    90
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    91
static inline void MakeRoadBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    92
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    93
	MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_ROAD);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    94
	_m[t].m3 = 0;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    95
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    96
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    97
static inline void MakeRailBridgeRamp(TileIndex t, Owner o, uint bridgetype, DiagDirection d, RailType r)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    98
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
    99
	MakeBridgeRamp(t, o, bridgetype, d, TRANSPORT_RAIL);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   100
	_m[t].m3 = r;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   101
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   102
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   103
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   104
static inline void MakeBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, TransportType tt)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   105
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   106
	SetTileType(t, MP_TUNNELBRIDGE);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   107
	SetTileOwner(t, OWNER_NONE);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   108
	_m[t].m2 = bridgetype << 4 | piece;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   109
	_m[t].m3 = 0;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   110
	_m[t].m4 = 0;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   111
	_m[t].m5 = 1 << 7 | 1 << 6 | 0 << 5 | 0 << 3 | tt << 1 | a;
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   112
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   113
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   114
static inline void MakeRoadBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   115
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   116
	MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_ROAD);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   117
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   118
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   119
static inline void MakeRailBridgeMiddle(TileIndex t, uint bridgetype, uint piece, Axis a, RailType r)
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   120
{
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   121
	MakeBridgeMiddle(t, bridgetype, piece, a, TRANSPORT_RAIL);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   122
	SB(_m[t].m3, 4, 4, r);
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   123
}
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   124
e0b7d48351a3 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3196
diff changeset
   125
3189
1af302c5abd0 (svn r3846) Add functions to set the type of stuff (clear, water, rail, road) under bridges
tron
parents:
diff changeset
   126
#endif