OpenTTD Source: src/newgrf_house.h Source File

OpenTTD Source 14.0-beta3

newgrf_house.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 NEWGRF_HOUSE_H
11 #define NEWGRF_HOUSE_H
12
13 #include "newgrf_callbacks.h"
14 #include "tile_cmd.h"
15 #include "house_type.h"
16 #include "newgrf_spritegroup.h"
17 #include "newgrf_town.h"
18
20 struct HouseScopeResolver : public ScopeResolver {
21 HouseID house_id;
22 TileIndex tile;
23 Town *town;
24 bool not_yet_constructed;
25 uint16_t initial_random_bits;
26 CargoTypes watched_cargo_triggers;
27
38 HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town,
39 bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers)
40 : ScopeResolver(ro), house_id(house_id), tile(tile), town(town), not_yet_constructed(not_yet_constructed),
41 initial_random_bits(initial_random_bits), watched_cargo_triggers(watched_cargo_triggers)
42 {
43 }
44
45 uint32_t GetRandomBits() const override;
46 uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override;
47 uint32_t GetTriggers() const override;
48 };
49
51 struct HouseResolverObject : public ResolverObject {
52 HouseScopeResolver house_scope;
53 TownScopeResolver town_scope;
54
55 HouseResolverObject(HouseID house_id, TileIndex tile, Town *town,
56 CallbackID callback = CBID_NO_CALLBACK, uint32_t param1 = 0, uint32_t param2 = 0,
57 bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0);
58
59 ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override
60 {
61 switch (scope) {
62 case VSG_SCOPE_SELF: return &this->house_scope;
63 case VSG_SCOPE_PARENT: return &this->town_scope;
64 default: return ResolverObject::GetScope(scope, relative);
65 }
66 }
67
68 GrfSpecFeature GetFeature() const override;
69 uint32_t GetDebugID() const override;
70 };
71
85 struct HouseClassMapping {
86 uint32_t grfid;
87 uint8_t class_id;
88 };
89
90 void ResetHouseClassIDs();
91 HouseClassID AllocateHouseClassID(byte grf_class_id, uint32_t grfid);
92
93 void InitializeBuildingCounts();
94 void IncreaseBuildingCount(Town *t, HouseID house_id);
95 void DecreaseBuildingCount(Town *t, HouseID house_id);
96
97 void DrawNewHouseTile(TileInfo *ti, HouseID house_id);
98 void AnimateNewHouseTile(TileIndex tile);
99 void AnimateNewHouseConstruction(TileIndex tile);
100
101 uint16_t GetHouseCallback(CallbackID callback, uint32_t param1, uint32_t param2, HouseID house_id, Town *town, TileIndex tile,
102 bool not_yet_constructed = false, uint8_t initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0);
103 void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes);
104
105 bool CanDeleteHouse(TileIndex tile);
106
107 bool NewHouseTileLoop(TileIndex tile);
108
109 enum HouseTrigger {
110 /* The tile of the house has been triggered during the tileloop. */
111 HOUSE_TRIGGER_TILE_LOOP = 0x01,
112 /*
113 * The top tile of a (multitile) building has been triggered during and all
114 * the tileloop other tiles of the same building get the same random value.
115 */
116 HOUSE_TRIGGER_TILE_LOOP_TOP = 0x02,
117 };
118 void TriggerHouse(TileIndex t, HouseTrigger trigger);
119
120 #endif /* NEWGRF_HOUSE_H */
house_type.h
VarSpriteGroupScope
VarSpriteGroupScope
Definition: newgrf_spritegroup.h:97
HouseScopeResolver::town
Town * town
Town of this house.
Definition: newgrf_house.h:23
HouseScopeResolver::watched_cargo_triggers
CargoTypes watched_cargo_triggers
Cargo types that triggered the watched cargo callback.
Definition: newgrf_house.h:26
TileInfo
Tile information, used while rendering the tile.
Definition: tile_cmd.h:43
HouseScopeResolver::initial_random_bits
uint16_t initial_random_bits
Random bits during construction checks.
Definition: newgrf_house.h:25
HouseResolverObject
Resolver object to be used for houses (feature 07 spritegroups).
Definition: newgrf_house.h:51
ResolverObject
Interface for SpriteGroup-s to access the gamestate.
Definition: newgrf_spritegroup.h:307
HouseScopeResolver::GetVariable
uint32_t GetVariable(byte variable, [[maybe_unused]] uint32_t parameter, bool *available) const override
Definition: newgrf_house.cpp:297
newgrf_callbacks.h
StrongType::Typedef< uint32_t, struct TileIndexTag, StrongType::Compare, StrongType::Integer, StrongType::Compatible< int32_t >, StrongType::Compatible< int64_t > >
CallbackID
CallbackID
List of implemented NewGRF callbacks.
Definition: newgrf_callbacks.h:20
VSG_SCOPE_PARENT
@ VSG_SCOPE_PARENT
Related object of the resolved one.
Definition: newgrf_spritegroup.h:101
HouseResolverObject::GetDebugID
uint32_t GetDebugID() const override
Get an identifier for the item being resolved.
Definition: newgrf_house.cpp:70
ScopeResolver
Interface to query and set values specific to a single VarSpriteGroupScope (action 2 scope).
Definition: newgrf_spritegroup.h:288
WatchedCargoCallback
void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes)
Run watched cargo accepted callback for a house.
Definition: newgrf_house.cpp:655
VSG_SCOPE_SELF
@ VSG_SCOPE_SELF
Resolved object itself.
Definition: newgrf_spritegroup.h:100
tile_cmd.h
HouseScopeResolver::HouseScopeResolver
HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town, bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers)
Constructor of a house scope resolver.
Definition: newgrf_house.h:38
HouseScopeResolver::GetRandomBits
uint32_t GetRandomBits() const override
Get a few random bits.
Definition: newgrf_house.cpp:144
HouseScopeResolver::house_id
HouseID house_id
Type of house being queried.
Definition: newgrf_house.h:21
HouseScopeResolver::not_yet_constructed
bool not_yet_constructed
True for construction check.
Definition: newgrf_house.h:24
CBID_NO_CALLBACK
@ CBID_NO_CALLBACK
Set when using the callback resolve system, but not to resolve a callback.
Definition: newgrf_callbacks.h:22
HouseClassID
uint16_t HouseClassID
Classes of houses.
Definition: house_type.h:14
IncreaseBuildingCount
void IncreaseBuildingCount(Town *t, HouseID house_id)
IncreaseBuildingCount() Increase the count of a building when it has been added by a town.
Definition: newgrf_house.cpp:112
ResolverObject::GetScope
virtual ScopeResolver * GetScope(VarSpriteGroupScope scope=VSG_SCOPE_SELF, byte relative=0)
Get a resolver for the scope.
Definition: newgrf_spritegroup.cpp:135
TownScopeResolver
Scope resolver for a town.
Definition: newgrf_town.h:22
HouseResolverObject::GetScope
ScopeResolver * GetScope(VarSpriteGroupScope scope=VSG_SCOPE_SELF, byte relative=0) override
Get a resolver for the scope.
Definition: newgrf_house.h:59
newgrf_spritegroup.h
newgrf_town.h
GrfSpecFeature
GrfSpecFeature
Definition: newgrf.h:66
DecreaseBuildingCount
void DecreaseBuildingCount(Town *t, HouseID house_id)
DecreaseBuildingCount() Decrease the number of a building when it is deleted.
Definition: newgrf_house.cpp:131
HouseClassMapping::grfid
uint32_t grfid
The GRF ID of the file this class belongs to.
Definition: newgrf_house.h:86
HouseResolverObject::GetFeature
GrfSpecFeature GetFeature() const override
Get the feature number being resolved for.
Definition: newgrf_house.cpp:65
ResolverObject::callback
CallbackID callback
Callback being resolved.
Definition: newgrf_spritegroup.h:325
HouseScopeResolver
Scope resolver for houses.
Definition: newgrf_house.h:20
HouseID
uint16_t HouseID
OpenTTD ID of house types.
Definition: house_type.h:13
HouseScopeResolver::tile
TileIndex tile
Tile of this house.
Definition: newgrf_house.h:22
Town
Town data structure.
Definition: town.h:50
HouseClassMapping::class_id
uint8_t class_id
The class id within the grf file.
Definition: newgrf_house.h:87
ScopeResolver::ro
ResolverObject & ro
Surrounding resolver object.
Definition: newgrf_spritegroup.h:289
HouseScopeResolver::GetTriggers
uint32_t GetTriggers() const override
Get the triggers.
Definition: newgrf_house.cpp:151
HouseResolverObject::HouseResolverObject
HouseResolverObject(HouseID house_id, TileIndex tile, Town *town, CallbackID callback=CBID_NO_CALLBACK, uint32_t param1=0, uint32_t param2=0, bool not_yet_constructed=false, uint8_t initial_random_bits=0, CargoTypes watched_cargo_triggers=0)
Construct a resolver for a house.
Definition: newgrf_house.cpp:55
HouseClassMapping
Makes class IDs unique to each GRF file.
Definition: newgrf_house.h:85