author | KUDr |
Sat, 21 Apr 2007 08:23:57 +0000 | |
branch | cpp_gui |
changeset 6308 | 646711c5feaa |
parent 6307 | f40e88cff863 |
child 6743 | cabfaa4a0295 |
permissions | -rw-r--r-- |
3319
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
1 |
/* $Id$ */ |
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
2 |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
3 |
/** @file town_map.h Accessors for towns */ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
4 |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
5 |
#ifndef TOWN_MAP_H |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
6 |
#define TOWN_MAP_H |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
7 |
|
3319
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
8 |
#include "town.h" |
6303 | 9 |
#include "date.h" |
3319
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
10 |
|
6303 | 11 |
/** |
12 |
* Get the index of which town this house/street is attached to. |
|
13 |
* @param t the tile |
|
14 |
* @pre IsTileType(t, MP_HOUSE) or IsTileType(t, MP_STREET) |
|
15 |
* @return TownID |
|
16 |
*/ |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
17 |
static inline TownID GetTownIndex(TileIndex t) |
3319
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
18 |
{ |
3369
00c2ca209a89
(svn r4166) Sprinkle several map accessors with assert()s
tron
parents:
3319
diff
changeset
|
19 |
assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_STREET)); // XXX incomplete |
3319
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
20 |
return _m[t].m2; |
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
21 |
} |
7d04847e4689
(svn r4085) Add GetTown{Index,ByTile}() to get the town index resp. the town from a tile
tron
parents:
diff
changeset
|
22 |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
23 |
/** |
3983
d2d6496238e4
(svn r5171) Get rid of an ungly hack in the load routine, which temporarily turned house and road tiles into void tiles to calculate the closest town
tron
parents:
3432
diff
changeset
|
24 |
* Set the town index for a road or house tile. |
6303 | 25 |
* @param t the tile |
26 |
* @pre IsTileType(t, MP_HOUSE) or IsTileType(t, MP_STREET) |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
27 |
* @param index the index of the town |
6220
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
28 |
* @pre IsTileType(t, MP_STREET) || IsTileType(t, MP_HOUSE) |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
29 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
30 |
static inline void SetTownIndex(TileIndex t, TownID index) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
31 |
{ |
6303 | 32 |
assert(IsTileType(t, MP_HOUSE) || IsTileType(t, MP_STREET)); |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
33 |
_m[t].m2 = index; |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
34 |
} |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
35 |
|
6220
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
36 |
/** |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
37 |
* Gets the town associated with the house or road tile |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
38 |
* @param t the tile to get the town of |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
39 |
* @return the town |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
40 |
*/ |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
41 |
static inline Town* GetTownByTile(TileIndex t) |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
42 |
{ |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
43 |
return GetTown(GetTownIndex(t)); |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
44 |
} |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
45 |
|
6303 | 46 |
/** |
47 |
* Get the type of this house, which is an index into the house spec array |
|
48 |
* Since m4 is only a byte and we want to support 512 houses, we use the bit 6 |
|
49 |
* of m3 as an additional bit to house type. |
|
50 |
* @param t the tile |
|
51 |
* @pre IsTileType(t, MP_HOUSE) |
|
52 |
* @return house type |
|
53 |
*/ |
|
54 |
static inline HouseID GetHouseType(TileIndex t) |
|
6220
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
55 |
{ |
0c2371b1edda
(svn r8651) -Codechange: group the functions related to getting and setting the town index and move one function that is not related to the map array out of town_map.h.
rubidium
parents:
5726
diff
changeset
|
56 |
assert(IsTileType(t, MP_HOUSE)); |
6303 | 57 |
return _m[t].m4 | (GB(_m[t].m3, 6, 1) << 8); |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
58 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
59 |
|
6303 | 60 |
/** |
61 |
* Set the house type. |
|
62 |
* @param t the tile |
|
63 |
* @param house_id the new house type |
|
64 |
* @pre IsTileType(t, MP_HOUSE) |
|
65 |
*/ |
|
66 |
static inline void SetHouseType(TileIndex t, HouseID house_id) |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
67 |
{ |
6303 | 68 |
assert(IsTileType(t, MP_HOUSE)); |
69 |
_m[t].m4 = GB(house_id, 0, 8); |
|
70 |
SB(_m[t].m3, 6, 1, GB(house_id, 8, 1)); |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
71 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
72 |
|
6303 | 73 |
/** |
74 |
* Check if the lift of this animated house has a destination |
|
75 |
* @param t the tile |
|
76 |
* @return has destination |
|
77 |
*/ |
|
78 |
static inline bool LiftHasDestination(TileIndex t) |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
79 |
{ |
6303 | 80 |
return HASBIT(_me[t].m7, 0); |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
81 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
82 |
|
6303 | 83 |
/** |
84 |
* Set the new destination of the lift for this animated house, and activate |
|
85 |
* the LiftHasDestination bit. |
|
86 |
* @param t the tile |
|
87 |
* @param dest new destination |
|
88 |
*/ |
|
89 |
static inline void SetLiftDestination(TileIndex t, byte dest) |
|
90 |
{ |
|
91 |
SETBIT(_me[t].m7, 0); |
|
92 |
SB(_me[t].m7, 1, 3, dest); |
|
93 |
} |
|
94 |
||
95 |
/** |
|
96 |
* Get the current destination for this lift |
|
97 |
* @param t the tile |
|
98 |
* @return destination |
|
99 |
*/ |
|
100 |
static inline byte GetLiftDestination(TileIndex t) |
|
101 |
{ |
|
102 |
return GB(_me[t].m7, 1, 3); |
|
103 |
} |
|
104 |
||
105 |
/** |
|
106 |
* Stop the lift of this animated house from moving. |
|
107 |
* Clears the first 4 bits of m7 at once, clearing the LiftHasDestination bit |
|
108 |
* and the destination. |
|
109 |
* @param t the tile |
|
110 |
*/ |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
111 |
static inline void HaltLift(TileIndex t) |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
112 |
{ |
6303 | 113 |
SB(_me[t].m7, 0, 4, 0); |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
114 |
DeleteAnimatedTile(t); |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
115 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
116 |
|
6303 | 117 |
/** |
118 |
* Get the position of the lift on this animated house |
|
119 |
* @param t the tile |
|
120 |
* @return position, from 0 to 36 |
|
121 |
*/ |
|
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
122 |
static inline byte GetLiftPosition(TileIndex t) |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
123 |
{ |
6303 | 124 |
return GB(_m[t].m6, 2, 6); |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
125 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
126 |
|
6303 | 127 |
/** |
128 |
* Set the position of the lift on this animated house |
|
129 |
* @param t the tile |
|
6307 | 130 |
* @param pos position, from 0 to 36 |
6303 | 131 |
*/ |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
132 |
static inline void SetLiftPosition(TileIndex t, byte pos) |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
133 |
{ |
6303 | 134 |
SB(_m[t].m6, 2, 6, pos); |
3426
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
135 |
} |
dab412dcee39
(svn r4254) -Codechange: Add and make use of map accessors for town lifts.
celestar
parents:
3382
diff
changeset
|
136 |
|
6303 | 137 |
/** |
138 |
* Get the current animation frame for this house |
|
139 |
* @param t the tile |
|
140 |
* @pre IsTileType(t, MP_HOUSE) |
|
141 |
* @return frame number |
|
142 |
*/ |
|
143 |
static inline byte GetHouseAnimationFrame(TileIndex t) |
|
144 |
{ |
|
145 |
assert(IsTileType(t, MP_HOUSE)); |
|
146 |
return GB(_m[t].m6, 3, 5); |
|
147 |
} |
|
148 |
||
149 |
/** |
|
150 |
* Set a new animation frame for this house |
|
151 |
* @param t the tile |
|
152 |
* @param frame the new frame number |
|
153 |
* @pre IsTileType(t, MP_HOUSE) |
|
154 |
*/ |
|
155 |
static inline void SetHouseAnimationFrame(TileIndex t, byte frame) |
|
156 |
{ |
|
157 |
assert(IsTileType(t, MP_HOUSE)); |
|
158 |
SB(_m[t].m6, 3, 5, frame); |
|
159 |
} |
|
160 |
||
161 |
/** |
|
162 |
* Get the completion of this house |
|
163 |
* @param t the tile |
|
164 |
* @return true if it is, false if it is not |
|
165 |
*/ |
|
166 |
static inline bool IsHouseCompleted(TileIndex t) |
|
167 |
{ |
|
168 |
assert(IsTileType(t, MP_HOUSE)); |
|
169 |
return HASBIT(_m[t].m3, 7); |
|
170 |
} |
|
171 |
||
172 |
/** |
|
173 |
* Mark this house as been completed |
|
174 |
* @param t the tile |
|
175 |
* @param status |
|
176 |
*/ |
|
177 |
static inline void SetHouseCompleted(TileIndex t, bool status) |
|
178 |
{ |
|
179 |
assert(IsTileType(t, MP_HOUSE)); |
|
180 |
SB(_m[t].m3, 7, 1, !!status); |
|
181 |
} |
|
182 |
||
183 |
/** |
|
184 |
* Make the tile a house. |
|
185 |
* @param t tile index |
|
186 |
* @param tid Town index |
|
187 |
* @param counter of construction step |
|
188 |
* @param stage of construction (used for drawing) |
|
189 |
* @param type of house. Index into house specs array |
|
190 |
* @param random_bits required for newgrf houses |
|
191 |
* @pre IsTileType(t, MP_CLEAR) |
|
192 |
*/ |
|
193 |
static inline void MakeHouseTile(TileIndex t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits) |
|
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
194 |
{ |
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
195 |
assert(IsTileType(t, MP_CLEAR)); |
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
196 |
|
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
197 |
SetTileType(t, MP_HOUSE); |
6303 | 198 |
_m[t].m1 = random_bits; |
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
199 |
_m[t].m2 = tid; |
6303 | 200 |
_m[t].m3 = 0; |
201 |
SetHouseType(t, type); |
|
202 |
SetHouseCompleted(t, stage == TOWN_HOUSE_COMPLETED); |
|
203 |
_m[t].m5 = IsHouseCompleted(t) ? 0 : (stage << 3 | counter); |
|
204 |
SetHouseAnimationFrame(t, 0); |
|
205 |
_me[t].m7 = GetHouseSpecs(type)->processing_time; |
|
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
206 |
|
6303 | 207 |
if (GetHouseSpecs(type)->building_flags & BUILDING_IS_ANIMATED) AddAnimatedTile(t); |
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
208 |
MarkTileDirtyByTile(t); |
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
209 |
} |
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
210 |
|
6303 | 211 |
/** |
212 |
* Helper function for MakeHouseTile. |
|
213 |
* It is called for each tile of a multi-tile house. |
|
214 |
* Parametes are the same. |
|
215 |
* @param t tile index |
|
216 |
* @param tid Town index |
|
217 |
* @param counter of construction step |
|
218 |
* @param stage of construction (used for drawing) |
|
219 |
* @param type of house. Index into house specs array |
|
220 |
* @param random_bits required for newgrf houses |
|
221 |
*/ |
|
222 |
static inline void MakeTownHouse(TileIndex t, TownID tid, byte counter, byte stage, HouseID type, byte random_bits) |
|
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
223 |
{ |
6303 | 224 |
BuildingFlags size = GetHouseSpecs(type)->building_flags; |
225 |
MakeHouseTile(t, tid, counter, stage, type, random_bits); |
|
226 |
if (size & BUILDING_2_TILES_Y) MakeHouseTile(t + TileDiffXY(0, 1), tid, counter, stage, ++type, random_bits); |
|
227 |
if (size & BUILDING_2_TILES_X) MakeHouseTile(t + TileDiffXY(1, 0), tid, counter, stage, ++type, random_bits); |
|
228 |
if (size & BUILDING_HAS_4_TILES) MakeHouseTile(t + TileDiffXY(1, 1), tid, counter, stage, ++type, random_bits); |
|
3382
c9c8d85aa632
(svn r4190) -Codechange: Add and make use of an accessor function to create houses
celestar
parents:
3377
diff
changeset
|
229 |
} |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
230 |
|
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
231 |
/** |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
232 |
* House Construction Scheme. |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
233 |
* Construction counter, for buildings under construction. Incremented on every |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
234 |
* periodic tile processing. |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
235 |
* On wraparound, the stage of building in is increased. |
6303 | 236 |
* GetHouseBuildingStage is taking care of the real stages, |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
237 |
* (as the sprite for the next phase of house building) |
6303 | 238 |
* (Get|Inc)HouseConstructionTick is simply a tick counter between the |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
239 |
* different stages |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
240 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
241 |
|
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
242 |
/** |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
243 |
* Gets the building stage of a house |
6303 | 244 |
* Since the stage is used for determining what sprite to use, |
245 |
* if the house is complete (and that stage no longuer is available), |
|
246 |
* fool the system by returning the TOWN_HOUSE_COMPLETE (3), |
|
247 |
* thus showing a beautiful complete house. |
|
248 |
* @param t the tile of the house to get the building stage of |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
249 |
* @pre IsTileType(t, MP_HOUSE) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
250 |
* @return the building stage of the house |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
251 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
252 |
static inline byte GetHouseBuildingStage(TileIndex t) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
253 |
{ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
254 |
assert(IsTileType(t, MP_HOUSE)); |
6303 | 255 |
return IsHouseCompleted(t) ? (byte)TOWN_HOUSE_COMPLETED : GB(_m[t].m5, 3, 2); |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
256 |
} |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
257 |
|
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
258 |
/** |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
259 |
* Gets the construction stage of a house |
6303 | 260 |
* @param t the tile of the house to get the construction stage of |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
261 |
* @pre IsTileType(t, MP_HOUSE) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
262 |
* @return the construction stage of the house |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
263 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
264 |
static inline byte GetHouseConstructionTick(TileIndex t) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
265 |
{ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
266 |
assert(IsTileType(t, MP_HOUSE)); |
6303 | 267 |
return IsHouseCompleted(t) ? 0 : GB(_m[t].m5, 0, 3); |
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
268 |
} |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
269 |
|
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
270 |
/** |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
271 |
* Sets the increment stage of a house |
6303 | 272 |
* It is working with the whole counter + stage 5 bits, making it |
273 |
* easier to work: the wraparound is automatic. |
|
274 |
* @param t the tile of the house to increment the construction stage of |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
275 |
* @pre IsTileType(t, MP_HOUSE) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
276 |
*/ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
277 |
static inline void IncHouseConstructionTick(TileIndex t) |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
278 |
{ |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
279 |
assert(IsTileType(t, MP_HOUSE)); |
6303 | 280 |
AB(_m[t].m5, 0, 5, 1); |
281 |
||
282 |
if (GB(_m[t].m5, 3, 2) == TOWN_HOUSE_COMPLETED) { |
|
283 |
/* House is now completed. |
|
284 |
* Store the year of construction as well, for newgrf house purpose */ |
|
285 |
SetHouseCompleted(t, true); |
|
286 |
_m[t].m5 = clamp(_cur_year - ORIGINAL_BASE_YEAR, 0, 0xFF); |
|
287 |
} |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
288 |
} |
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
289 |
|
6303 | 290 |
/** |
291 |
* Get the year that this house was constructed (between 1920 and 2175). |
|
292 |
* @param t the tile of this house |
|
293 |
* @pre IsTileType(t, MP_HOUSE) |
|
294 |
* @return year |
|
295 |
*/ |
|
296 |
static inline Year GetHouseConstructionYear(TileIndex t) |
|
297 |
{ |
|
298 |
assert(IsTileType(t, MP_HOUSE)); |
|
299 |
return IsHouseCompleted(t) ? _m[t].m5 + ORIGINAL_BASE_YEAR : 0; |
|
300 |
} |
|
301 |
||
302 |
/** |
|
303 |
* Get the random bits for this house. |
|
304 |
* This is required for newgrf house |
|
305 |
* @param t the tile of this house |
|
306 |
* @pre IsTileType(t, MP_HOUSE) |
|
307 |
* @return random bits |
|
308 |
*/ |
|
309 |
static inline byte GetHouseRandomBits(TileIndex t) |
|
310 |
{ |
|
311 |
assert(IsTileType(t, MP_HOUSE)); |
|
312 |
return _m[t].m1; |
|
313 |
} |
|
314 |
||
315 |
/** |
|
316 |
* Set the activated triggers bits for this house. |
|
317 |
* This is required for newgrf house |
|
6307 | 318 |
* @param t the tile of this house |
319 |
* @param triggers the activated triggers |
|
6303 | 320 |
* @pre IsTileType(t, MP_HOUSE) |
321 |
*/ |
|
322 |
static inline void SetHouseTriggers(TileIndex t, byte triggers) |
|
323 |
{ |
|
324 |
assert(IsTileType(t, MP_HOUSE)); |
|
325 |
SB(_m[t].m3, 0, 5, triggers); |
|
326 |
} |
|
327 |
||
328 |
/** |
|
329 |
* Get the already activated triggers bits for this house. |
|
330 |
* This is required for newgrf house |
|
331 |
* @param t the tile of this house |
|
332 |
* @pre IsTileType(t, MP_HOUSE) |
|
333 |
* @return triggers |
|
334 |
*/ |
|
335 |
static inline byte GetHouseTriggers(TileIndex t) |
|
336 |
{ |
|
337 |
assert(IsTileType(t, MP_HOUSE)); |
|
338 |
return GB(_m[t].m3, 0, 5); |
|
339 |
} |
|
340 |
||
341 |
/** |
|
342 |
* Get the amount of time remaining before the tile loop processes this tile. |
|
343 |
* @param t the house tile |
|
344 |
* @pre IsTileType(t, MP_HOUSE) |
|
345 |
* @return time remaining |
|
346 |
*/ |
|
347 |
static inline byte GetHouseProcessingTime(TileIndex t) |
|
348 |
{ |
|
349 |
assert(IsTileType(t, MP_HOUSE)); |
|
350 |
return _me[t].m7; |
|
351 |
} |
|
352 |
||
353 |
/** |
|
354 |
* Set the amount of time remaining before the tile loop processes this tile. |
|
355 |
* @param t the house tile |
|
356 |
* @param time the time to be set |
|
357 |
* @pre IsTileType(t, MP_HOUSE) |
|
358 |
*/ |
|
359 |
static inline void SetHouseProcessingTime(TileIndex t, byte time) |
|
360 |
{ |
|
361 |
assert(IsTileType(t, MP_HOUSE)); |
|
362 |
_me[t].m7 = time; |
|
363 |
} |
|
364 |
||
365 |
/** |
|
366 |
* Decrease the amount of time remaining before the tile loop processes this tile. |
|
367 |
* @param t the house tile |
|
368 |
* @pre IsTileType(t, MP_HOUSE) |
|
369 |
*/ |
|
370 |
static inline void DecHouseProcessingTime(TileIndex t) |
|
371 |
{ |
|
372 |
assert(IsTileType(t, MP_HOUSE)); |
|
373 |
_me[t].m7--; |
|
374 |
} |
|
3432
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
375 |
|
507fa7fd189d
(svn r4261) CodeChange : Add and Use Accessor for Houses Construction. And cleaning on town.flags12 too
belugas
parents:
3426
diff
changeset
|
376 |
#endif /* TOWN_MAP_H */ |