OpenTTD Source  20241120-master-g6d3adc6169
industry_map.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef INDUSTRY_MAP_H
11 #define INDUSTRY_MAP_H
12 
13 #include "industrytype.h"
14 #include "water_map.h"
15 
16 
23  GFX_COAL_MINE_TOWER_NOT_ANIMATED = 0,
24  GFX_COAL_MINE_TOWER_ANIMATED = 1,
25  GFX_POWERPLANT_CHIMNEY = 8,
26  GFX_POWERPLANT_SPARKS = 10,
27  GFX_OILRIG_1 = 24,
28  GFX_OILRIG_2 = 25,
29  GFX_OILRIG_3 = 26,
30  GFX_OILRIG_4 = 27,
31  GFX_OILRIG_5 = 28,
32  GFX_OILWELL_NOT_ANIMATED = 29,
33  GFX_OILWELL_ANIMATED_1 = 30,
34  GFX_OILWELL_ANIMATED_2 = 31,
35  GFX_OILWELL_ANIMATED_3 = 32,
36  GFX_COPPER_MINE_TOWER_NOT_ANIMATED = 47,
37  GFX_COPPER_MINE_TOWER_ANIMATED = 48,
38  GFX_COPPER_MINE_CHIMNEY = 49,
39  GFX_GOLD_MINE_TOWER_NOT_ANIMATED = 79,
40  GFX_GOLD_MINE_TOWER_ANIMATED = 88,
41  GFX_TOY_FACTORY = 143,
42  GFX_PLASTIC_FOUNTAIN_ANIMATED_1 = 148,
43  GFX_PLASTIC_FOUNTAIN_ANIMATED_2 = 149,
44  GFX_PLASTIC_FOUNTAIN_ANIMATED_3 = 150,
45  GFX_PLASTIC_FOUNTAIN_ANIMATED_4 = 151,
46  GFX_PLASTIC_FOUNTAIN_ANIMATED_5 = 152,
47  GFX_PLASTIC_FOUNTAIN_ANIMATED_6 = 153,
48  GFX_PLASTIC_FOUNTAIN_ANIMATED_7 = 154,
49  GFX_PLASTIC_FOUNTAIN_ANIMATED_8 = 155,
50  GFX_BUBBLE_GENERATOR = 161,
51  GFX_BUBBLE_CATCHER = 162,
52  GFX_TOFFEE_QUARY = 165,
53  GFX_SUGAR_MINE_SIEVE = 174,
55 };
56 
63 inline IndustryID GetIndustryIndex(Tile t)
64 {
65  assert(IsTileType(t, MP_INDUSTRY));
66  return t.m2();
67 }
68 
75 inline bool IsIndustryCompleted(Tile t)
76 {
77  assert(IsTileType(t, MP_INDUSTRY));
78  return HasBit(t.m1(), 7);
79 }
80 
81 IndustryType GetIndustryType(Tile tile);
82 
88 inline void SetIndustryCompleted(Tile tile)
89 {
90  assert(IsTileType(tile, MP_INDUSTRY));
91  SetBit(tile.m1(), 7);
92 }
93 
100 inline uint8_t GetIndustryConstructionStage(Tile tile)
101 {
102  assert(IsTileType(tile, MP_INDUSTRY));
103  return IsIndustryCompleted(tile) ? (uint8_t)INDUSTRY_COMPLETED : GB(tile.m1(), 0, 2);
104 }
105 
112 inline void SetIndustryConstructionStage(Tile tile, uint8_t value)
113 {
114  assert(IsTileType(tile, MP_INDUSTRY));
115  SB(tile.m1(), 0, 2, value);
116 }
117 
125 inline IndustryGfx GetCleanIndustryGfx(Tile t)
126 {
127  assert(IsTileType(t, MP_INDUSTRY));
128  return t.m5() | (GB(t.m6(), 2, 1) << 8);
129 }
130 
137 inline IndustryGfx GetIndustryGfx(Tile t)
138 {
139  assert(IsTileType(t, MP_INDUSTRY));
141 }
142 
149 inline void SetIndustryGfx(Tile t, IndustryGfx gfx)
150 {
151  assert(IsTileType(t, MP_INDUSTRY));
152  t.m5() = GB(gfx, 0, 8);
153  SB(t.m6(), 2, 1, GB(gfx, 8, 1));
154 }
155 
163 {
164  assert(IsTileType(tile, MP_INDUSTRY));
165  return GB(tile.m1(), 2, 2);
166 }
167 
174 inline void SetIndustryConstructionCounter(Tile tile, uint8_t value)
175 {
176  assert(IsTileType(tile, MP_INDUSTRY));
177  SB(tile.m1(), 2, 2, value);
178 }
179 
188 {
189  assert(IsTileType(tile, MP_INDUSTRY));
190  SB(tile.m1(), 0, 4, 0);
191  SB(tile.m1(), 7, 1, 0);
192 }
193 
199 inline uint8_t GetIndustryAnimationLoop(Tile tile)
200 {
201  assert(IsTileType(tile, MP_INDUSTRY));
202  return tile.m4();
203 }
204 
211 inline void SetIndustryAnimationLoop(Tile tile, uint8_t count)
212 {
213  assert(IsTileType(tile, MP_INDUSTRY));
214  tile.m4() = count;
215 }
216 
224 inline uint8_t GetIndustryRandomBits(Tile tile)
225 {
226  assert(IsTileType(tile, MP_INDUSTRY));
227  return tile.m3();
228 }
229 
237 inline void SetIndustryRandomBits(Tile tile, uint8_t bits)
238 {
239  assert(IsTileType(tile, MP_INDUSTRY));
240  tile.m3() = bits;
241 }
242 
250 inline uint8_t GetIndustryTriggers(Tile tile)
251 {
252  assert(IsTileType(tile, MP_INDUSTRY));
253  return GB(tile.m6(), 3, 3);
254 }
255 
256 
264 inline void SetIndustryTriggers(Tile tile, uint8_t triggers)
265 {
266  assert(IsTileType(tile, MP_INDUSTRY));
267  SB(tile.m6(), 3, 3, triggers);
268 }
269 
278 inline void MakeIndustry(Tile t, IndustryID index, IndustryGfx gfx, uint8_t random, WaterClass wc)
279 {
281  t.m1() = 0;
282  t.m2() = index;
283  SetIndustryRandomBits(t, random); // m3
284  t.m4() = 0;
285  SetIndustryGfx(t, gfx); // m5, part of m6
286  SetIndustryTriggers(t, 0); // rest of m6
287  SetWaterClass(t, wc);
288  t.m7() = 0;
289 }
290 
291 #endif /* INDUSTRY_MAP_H */
constexpr debug_inline bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr T SB(T &x, const uint8_t s, const uint8_t n, const U d)
Set n bits in x starting at bit s to d.
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
constexpr static debug_inline uint GB(const T x, const uint8_t s, const uint8_t n)
Fetch n bits from x, started at bit s.
Wrapper class to abstract away the way the tiles are stored.
Definition: map_func.h:25
debug_inline uint8_t & m7()
Primarily used for newgrf support.
Definition: map_func.h:185
debug_inline uint8_t & m5()
General purpose.
Definition: map_func.h:161
debug_inline uint8_t & m1()
Primarily used for ownership information.
Definition: map_func.h:113
debug_inline uint8_t & m4()
General purpose.
Definition: map_func.h:149
debug_inline uint16_t & m2()
Primarily used for indices to towns, industries and stations.
Definition: map_func.h:125
debug_inline uint8_t & m6()
General purpose.
Definition: map_func.h:173
debug_inline uint8_t & m3()
General purpose.
Definition: map_func.h:137
void SetIndustryCompleted(Tile tile)
Set if the industry that owns the tile as under construction or not.
Definition: industry_map.h:88
IndustryGfx GetCleanIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile as stored in the without translation.
Definition: industry_map.h:125
IndustryGraphics
The following enums are indices used to know what to draw for this industry tile.
Definition: industry_map.h:22
@ GFX_WATERTILE_SPECIALCHECK
not really a tile, but rather a very special check
Definition: industry_map.h:54
uint8_t GetIndustryRandomBits(Tile tile)
Get the random bits for this tile.
Definition: industry_map.h:224
void SetIndustryGfx(Tile t, IndustryGfx gfx)
Set the industry graphics ID for the given industry tile.
Definition: industry_map.h:149
void ResetIndustryConstructionStage(Tile tile)
Reset the construction stage counter of the industry, as well as the completion bit.
Definition: industry_map.h:187
void SetIndustryConstructionCounter(Tile tile, uint8_t value)
Sets this industry tile's construction counter value.
Definition: industry_map.h:174
IndustryGfx GetIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile.
Definition: industry_map.h:137
bool IsIndustryCompleted(Tile t)
Is this industry tile fully built?
Definition: industry_map.h:75
void SetIndustryTriggers(Tile tile, uint8_t triggers)
Set the activated triggers bits for this industry tile Used for grf callbacks.
Definition: industry_map.h:264
IndustryID GetIndustryIndex(Tile t)
Get the industry ID of the given tile.
Definition: industry_map.h:63
void SetIndustryRandomBits(Tile tile, uint8_t bits)
Set the random bits for this tile.
Definition: industry_map.h:237
uint8_t GetIndustryTriggers(Tile tile)
Get the activated triggers bits for this industry tile Used for grf callbacks.
Definition: industry_map.h:250
uint8_t GetIndustryConstructionCounter(Tile tile)
Returns this industry tile's construction counter value.
Definition: industry_map.h:162
void MakeIndustry(Tile t, IndustryID index, IndustryGfx gfx, uint8_t random, WaterClass wc)
Make the given tile an industry tile.
Definition: industry_map.h:278
void SetIndustryAnimationLoop(Tile tile, uint8_t count)
Set the animation loop number.
Definition: industry_map.h:211
void SetIndustryConstructionStage(Tile tile, uint8_t value)
Sets the industry construction stage of the specified tile.
Definition: industry_map.h:112
IndustryType GetIndustryType(Tile tile)
Retrieve the type for this industry.
uint8_t GetIndustryAnimationLoop(Tile tile)
Get the animation loop number.
Definition: industry_map.h:199
uint8_t GetIndustryConstructionStage(Tile tile)
Returns the industry construction stage of the specified tile.
Definition: industry_map.h:100
static const int INDUSTRY_COMPLETED
final stage of industry construction.
Definition: industry_type.h:36
Industry type specs.
IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
Do industry gfx ID translation for NewGRFs.
Definition: industrytype.h:189
void SetTileType(Tile tile, TileType type)
Set the type of a tile.
Definition: tile_map.h:131
static debug_inline bool IsTileType(Tile tile, TileType type)
Checks if a tile is a given tiletype.
Definition: tile_map.h:150
@ MP_INDUSTRY
Part of an industry.
Definition: tile_type.h:56
Map accessors for water tiles.
void SetWaterClass(Tile t, WaterClass wc)
Set the water class at a tile.
Definition: water_map.h:124
WaterClass
classes of water (for WATER_TILE_CLEAR water tile type).
Definition: water_map.h:39