water_map.h
author celestar
Wed, 05 Apr 2006 08:28:03 +0000
changeset 3449 d45c8d0bf848
parent 3425 5411e9c8b6c8
child 3636 a36cc46e754d
permissions -rw-r--r--
(svn r4281) -Cleanup: Begun cleaning up elrail code a bit, mostly comments and enum/array alignment
3111
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
     1
/* $Id$ */
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
     2
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
     3
#ifndef WATER_MAP_H
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
     4
#define WATER_MAP_H
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
     5
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
     6
typedef enum WaterTileType {
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
     7
	WATER_CLEAR,
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
     8
	WATER_COAST,
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
     9
	WATER_LOCK,
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    10
	WATER_DEPOT,
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    11
} WaterTileType;
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    12
3372
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    13
typedef enum DepotPart {
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    14
	DEPOT_NORTH = 0x80,
3373
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    15
	DEPOT_SOUTH = 0x81,
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    16
	DEPOT_END   = 0x84,
3372
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    17
} DepotPart;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    18
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    19
typedef enum LockPart {
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    20
	LOCK_MIDDLE = 0x10,
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    21
	LOCK_LOWER  = 0x14,
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    22
	LOCK_UPPER  = 0x18,
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    23
	LOCK_END    = 0x1C
3372
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    24
} LockPart;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    25
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    26
static inline WaterTileType GetWaterTileType(TileIndex t)
3373
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    27
{
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    28
	if (_m[t].m5 == 0) return WATER_CLEAR;
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    29
	if (_m[t].m5 == 1) return WATER_COAST;
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    30
	if (IS_INT_INSIDE(_m[t].m5, LOCK_MIDDLE, LOCK_END)) return WATER_LOCK;
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    31
3424
4a62cc09fd18 (svn r4251) -Fix: Silence a warning in GetWaterTileType
celestar
parents: 3423
diff changeset
    32
	assert(IS_INT_INSIDE(_m[t].m5, DEPOT_NORTH, DEPOT_END));
4a62cc09fd18 (svn r4251) -Fix: Silence a warning in GetWaterTileType
celestar
parents: 3423
diff changeset
    33
	return WATER_DEPOT;
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    34
}
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    35
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    36
static inline bool IsWater(TileIndex t)
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    37
{
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    38
	return GetWaterTileType(t) == WATER_CLEAR;
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    39
}
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    40
3423
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    41
static inline bool IsCoast(TileIndex t)
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    42
{
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    43
	return GetWaterTileType(t) == WATER_COAST;
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    44
}
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    45
3402
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    46
static inline bool IsClearWaterTile(TileIndex t)
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    47
{
812f9dc4baff (svn r4212) -Codechange: Add and make use of an accessor that retrieves the type of a water tile. Add an enum describing the different water tiles
celestar
parents: 3373
diff changeset
    48
	return IsTileType(t, MP_WATER) && IsWater(t) && GetTileSlope(t, NULL) == 0;
3373
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    49
}
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    50
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    51
static inline TileIndex GetOtherShipDepotTile(TileIndex t)
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    52
{
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    53
	return t + (HASBIT(_m[t].m5, 0) ? -1 : 1) * (HASBIT(_m[t].m5, 1) ? TileDiffXY(0, 1) : TileDiffXY(1, 0));
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    54
}
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    55
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    56
static inline TileIndex IsShipDepot(TileIndex t)
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    57
{
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    58
	return IS_INT_INSIDE(_m[t].m5, DEPOT_NORTH, DEPOT_END);
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    59
}
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    60
3423
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    61
static inline Axis GetShipDepotAxis(TileIndex t)
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    62
{
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    63
	return (Axis)GB(_m[t].m5, 1, 1);
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    64
}
dab85d82708b (svn r4250) -Codechange: Further use of map accessors for water tiles
celestar
parents: 3402
diff changeset
    65
3373
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    66
static inline DiagDirection GetLockDirection(TileIndex t)
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    67
{
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    68
	return (DiagDirection)GB(_m[t].m5, 0, 2);
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    69
}
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    70
3425
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    71
static inline byte GetSection(TileIndex t)
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    72
{
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    73
	assert(GetWaterTileType(t) == WATER_LOCK || GetWaterTileType(t) == WATER_DEPOT);
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    74
	return GB(_m[t].m5, 0, 4);
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    75
}
5411e9c8b6c8 (svn r4252) -Codechange: Make more use of map accessors. water_cmd is now map access free
celestar
parents: 3424
diff changeset
    76
3373
2838aadd3a28 (svn r4172) -Codechange: Added a few accessors to work with ShipDepots and Locks
celestar
parents: 3372
diff changeset
    77
3111
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    78
static inline void MakeWater(TileIndex t)
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    79
{
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    80
	SetTileType(t, MP_WATER);
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    81
	SetTileOwner(t, OWNER_WATER);
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    82
	_m[t].m2 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    83
	_m[t].m3 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    84
	_m[t].m4 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    85
	_m[t].m5 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    86
}
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    87
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    88
static inline void MakeShore(TileIndex t)
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    89
{
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    90
	SetTileType(t, MP_WATER);
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    91
	SetTileOwner(t, OWNER_WATER);
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    92
	_m[t].m2 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    93
	_m[t].m3 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    94
	_m[t].m4 = 0;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    95
	_m[t].m5 = 1;
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    96
}
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
    97
3372
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    98
static inline void MakeShipDepot(TileIndex t, Owner o, DepotPart base, Axis a)
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
    99
{
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   100
	SetTileType(t, MP_WATER);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   101
	SetTileOwner(t, o);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   102
	_m[t].m2 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   103
	_m[t].m3 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   104
	_m[t].m4 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   105
	_m[t].m5 = base + a * 2;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   106
}
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   107
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   108
static inline void MakeLockTile(TileIndex t, byte section)
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   109
{
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   110
	SetTileType(t, MP_WATER);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   111
	SetTileOwner(t, OWNER_WATER);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   112
	_m[t].m2 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   113
	_m[t].m3 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   114
	_m[t].m4 = 0;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   115
	_m[t].m5 = section;
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   116
}
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   117
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   118
static inline void MakeLock(TileIndex t, DiagDirection d)
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   119
{
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   120
	TileIndexDiff delta = TileOffsByDir(d);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   121
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   122
	MakeLockTile(t, LOCK_MIDDLE + d);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   123
	MakeLockTile(t - delta, LOCK_LOWER + d);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   124
	MakeLockTile(t + delta, LOCK_UPPER + d);
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   125
}
f6afa98d5219 (svn r4171) -Codechange: Create map accessor functions for creating ship depots and locks. Make use of them
celestar
parents: 3111
diff changeset
   126
3111
750f37699a13 (svn r3714) Add functions to turn tiles into water and shore tiles
tron
parents:
diff changeset
   127
#endif