OpenTTD Source 20241224-master-gf74b0cf984
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
63inline IndustryID GetIndustryIndex(Tile t)
64{
65 assert(IsTileType(t, MP_INDUSTRY));
66 return t.m2();
67}
68
76{
77 assert(IsTileType(t, MP_INDUSTRY));
78 return HasBit(t.m1(), 7);
79}
80
81IndustryType GetIndustryType(Tile tile);
82
88inline void SetIndustryCompleted(Tile tile)
89{
90 assert(IsTileType(tile, MP_INDUSTRY));
91 SetBit(tile.m1(), 7);
92}
93
101{
102 assert(IsTileType(tile, MP_INDUSTRY));
103 return IsIndustryCompleted(tile) ? (uint8_t)INDUSTRY_COMPLETED : GB(tile.m1(), 0, 2);
104}
105
112inline void SetIndustryConstructionStage(Tile tile, uint8_t value)
113{
114 assert(IsTileType(tile, MP_INDUSTRY));
115 SB(tile.m1(), 0, 2, value);
116}
117
125inline IndustryGfx GetCleanIndustryGfx(Tile t)
126{
127 assert(IsTileType(t, MP_INDUSTRY));
128 return t.m5() | (GB(t.m6(), 2, 1) << 8);
129}
130
137inline IndustryGfx GetIndustryGfx(Tile t)
138{
139 assert(IsTileType(t, MP_INDUSTRY));
141}
142
149inline 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
174inline 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
199inline uint8_t GetIndustryAnimationLoop(Tile tile)
200{
201 assert(IsTileType(tile, MP_INDUSTRY));
202 return tile.m4();
203}
204
211inline void SetIndustryAnimationLoop(Tile tile, uint8_t count)
212{
213 assert(IsTileType(tile, MP_INDUSTRY));
214 tile.m4() = count;
215}
216
224inline uint8_t GetIndustryRandomBits(Tile tile)
225{
226 assert(IsTileType(tile, MP_INDUSTRY));
227 return tile.m3();
228}
229
237inline void SetIndustryRandomBits(Tile tile, uint8_t bits)
238{
239 assert(IsTileType(tile, MP_INDUSTRY));
240 tile.m3() = bits;
241}
242
250inline uint8_t GetIndustryTriggers(Tile tile)
251{
252 assert(IsTileType(tile, MP_INDUSTRY));
253 return GB(tile.m6(), 3, 3);
254}
255
256
264inline void SetIndustryTriggers(Tile tile, uint8_t triggers)
265{
266 assert(IsTileType(tile, MP_INDUSTRY));
267 SB(tile.m6(), 3, 3, triggers);
268}
269
278inline 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 */
debug_inline constexpr 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.
debug_inline static constexpr 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 uint16_t & m2()
Primarily used for indices to towns, industries and stations.
Definition map_func.h:125
debug_inline uint8_t & m7()
Primarily used for newgrf support.
Definition map_func.h:185
debug_inline uint8_t & m4()
General purpose.
Definition map_func.h:149
debug_inline uint8_t & m6()
General purpose.
Definition map_func.h:173
debug_inline uint8_t & m3()
General purpose.
Definition map_func.h:137
debug_inline uint8_t & m1()
Primarily used for ownership information.
Definition map_func.h:113
debug_inline uint8_t & m5()
General purpose.
Definition map_func.h:161
void SetIndustryCompleted(Tile tile)
Set if the industry that owns the tile as under construction or not.
IndustryGfx GetCleanIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile as stored in the without translation.
IndustryGraphics
The following enums are indices used to know what to draw for this industry tile.
@ GFX_WATERTILE_SPECIALCHECK
not really a tile, but rather a very special check
uint8_t GetIndustryRandomBits(Tile tile)
Get the random bits for this tile.
void SetIndustryGfx(Tile t, IndustryGfx gfx)
Set the industry graphics ID for the given industry tile.
void ResetIndustryConstructionStage(Tile tile)
Reset the construction stage counter of the industry, as well as the completion bit.
void SetIndustryConstructionCounter(Tile tile, uint8_t value)
Sets this industry tile's construction counter value.
IndustryGfx GetIndustryGfx(Tile t)
Get the industry graphics ID for the given industry tile.
bool IsIndustryCompleted(Tile t)
Is this industry tile fully built?
void SetIndustryTriggers(Tile tile, uint8_t triggers)
Set the activated triggers bits for this industry tile Used for grf callbacks.
IndustryID GetIndustryIndex(Tile t)
Get the industry ID of the given tile.
void SetIndustryRandomBits(Tile tile, uint8_t bits)
Set the random bits for this tile.
uint8_t GetIndustryTriggers(Tile tile)
Get the activated triggers bits for this industry tile Used for grf callbacks.
uint8_t GetIndustryConstructionCounter(Tile tile)
Returns this industry tile's construction counter value.
void MakeIndustry(Tile t, IndustryID index, IndustryGfx gfx, uint8_t random, WaterClass wc)
Make the given tile an industry tile.
void SetIndustryAnimationLoop(Tile tile, uint8_t count)
Set the animation loop number.
void SetIndustryConstructionStage(Tile tile, uint8_t value)
Sets the industry construction stage of the specified tile.
IndustryType GetIndustryType(Tile tile)
Retrieve the type for this industry.
uint8_t GetIndustryAnimationLoop(Tile tile)
Get the animation loop number.
uint8_t GetIndustryConstructionStage(Tile tile)
Returns the industry construction stage of the specified tile.
static const int INDUSTRY_COMPLETED
final stage of industry construction.
Industry type specs.
IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
Do industry gfx ID translation for NewGRFs.
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