author | tron |
Sun, 23 Apr 2006 13:48:16 +0000 | |
changeset 3636 | d87b21df2944 |
parent 3422 | 12cdb13ddb56 |
child 3773 | 996897ffc8ea |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
1213
bb9906f67932
(svn r1717) -Fix: some compilation problems for braindead VS6 and added missing files to project (thx bociusz)
darkvater
parents:
1211
diff
changeset
|
3 |
#include "stdafx.h" |
1211 | 4 |
#include "tile.h" |
5 |
||
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
6 |
/** Converts the heights of 4 corners into a tileh, and returns the minimum height of the tile |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
7 |
* @param n,w,e,s the four corners |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
8 |
* @param h uint pointer to write the height to |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
9 |
* @return the tileh |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
10 |
*/ |
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
11 |
Slope GetTileh(uint n, uint w, uint e, uint s, uint *h) |
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
12 |
{ |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
13 |
uint min = n; |
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
14 |
Slope r; |
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
15 |
|
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
16 |
if (min >= w) min = w; |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
17 |
if (min >= e) min = e; |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
18 |
if (min >= s) min = s; |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
19 |
|
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
20 |
r = SLOPE_FLAT; |
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
21 |
if ((n -= min) != 0) r += (--n << 4) + SLOPE_N; |
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
22 |
if ((e -= min) != 0) r += (--e << 4) + SLOPE_E; |
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
23 |
if ((s -= min) != 0) r += (--s << 4) + SLOPE_S; |
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
24 |
if ((w -= min) != 0) r += (--w << 4) + SLOPE_W; |
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
25 |
|
3422
12cdb13ddb56
(svn r4249) -Codechange: Replace more occurences of 16 by TILE_SIZE and of 8 by TILE_HEIGHT. Reverted one change from the previous commit because it was faulty
celestar
parents:
3379
diff
changeset
|
26 |
if (h != NULL) *h = min * TILE_HEIGHT; |
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
27 |
|
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
28 |
return r; |
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
29 |
} |
1335
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
30 |
|
3636
d87b21df2944
(svn r4541) Add a type for slopes and replace many magic numbers by the appropriate enums
tron
parents:
3422
diff
changeset
|
31 |
Slope GetTileSlope(TileIndex tile, uint *h) |
1335
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
32 |
{ |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
33 |
uint a; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
34 |
uint b; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
35 |
uint c; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
36 |
uint d; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
37 |
|
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
38 |
assert(tile < MapSize()); |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
39 |
|
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
40 |
if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) { |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
41 |
if (h != NULL) *h = 0; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
42 |
return 0; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
43 |
} |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
44 |
|
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
45 |
a = TileHeight(tile); |
1981 | 46 |
b = TileHeight(tile + TileDiffXY(1, 0)); |
47 |
c = TileHeight(tile + TileDiffXY(0, 1)); |
|
48 |
d = TileHeight(tile + TileDiffXY(1, 1)); |
|
1335
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
49 |
|
3279
7c642c5c501c
(svn r3992) -Fix: Rewrote the code to determine whether a rail-tile can be terraformed.
celestar
parents:
3017
diff
changeset
|
50 |
return GetTileh(a, b, c, d, h); |
1335
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
51 |
} |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
52 |
|
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
53 |
uint GetTileZ(TileIndex tile) |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
54 |
{ |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
55 |
uint h; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
56 |
GetTileSlope(tile, &h); |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
57 |
return h; |
a635854c23b6
(svn r1839) Move GetTileSlope() and GetTileZ() into tile.[ch] and use more explicit types as parameters
tron
parents:
1213
diff
changeset
|
58 |
} |