OpenTTD
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 
27 
39  bool not_yet_constructed, uint8 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 GetRandomBits() const override;
46  uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override;
47  uint32 GetTriggers() const override;
48 };
49 
52  HouseScopeResolver house_scope;
53  TownScopeResolver town_scope;
54 
56  CallbackID callback = CBID_NO_CALLBACK, uint32 param1 = 0, uint32 param2 = 0,
57  bool not_yet_constructed = false, uint8 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 
83  uint32 grfid;
84  uint8 class_id;
85 };
86 
87 HouseClassID AllocateHouseClassID(byte grf_class_id, uint32 grfid);
88 
89 void InitializeBuildingCounts();
92 
93 void DrawNewHouseTile(TileInfo *ti, HouseID house_id);
94 void AnimateNewHouseTile(TileIndex tile);
95 void AnimateNewHouseConstruction(TileIndex tile);
96 
97 uint16 GetHouseCallback(CallbackID callback, uint32 param1, uint32 param2, HouseID house_id, Town *town, TileIndex tile,
98  bool not_yet_constructed = false, uint8 initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0);
99 void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes);
100 
101 bool CanDeleteHouse(TileIndex tile);
102 
103 bool NewHouseTileLoop(TileIndex tile);
104 
105 enum HouseTrigger {
106  /* The tile of the house has been triggered during the tileloop. */
107  HOUSE_TRIGGER_TILE_LOOP = 0x01,
108  /*
109  * The top tile of a (multitile) building has been triggered during and all
110  * the tileloop other tiles of the same building get the same random value.
111  */
112  HOUSE_TRIGGER_TILE_LOOP_TOP = 0x02,
113 };
114 void TriggerHouse(TileIndex t, HouseTrigger trigger);
115 
116 #endif /* NEWGRF_HOUSE_H */
Interface to query and set values specific to a single VarSpriteGroupScope (action 2 scope)...
Tile information, used while rendering the tile.
Definition: tile_cmd.h:42
ResolverObject & ro
Surrounding resolver object.
VarSpriteGroupScope
void WatchedCargoCallback(TileIndex tile, CargoTypes trigger_cargoes)
Run watched cargo accepted callback for a house.
Interface for SpriteGroup-s to access the gamestate.
declaration of basic house types and enums
uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override
Town * town
Town of this house.
Definition: newgrf_house.h:23
uint16 HouseClassID
Classes of houses.
Definition: house_type.h:14
Makes class IDs unique to each GRF file.
Definition: newgrf_house.h:82
Set when using the callback resolve system, but not to resolve a callback.
HouseScopeResolver(ResolverObject &ro, HouseID house_id, TileIndex tile, Town *town, bool not_yet_constructed, uint8 initial_random_bits, CargoTypes watched_cargo_triggers)
Constructor of a house scope resolver.
Definition: newgrf_house.h:38
virtual ScopeResolver * GetScope(VarSpriteGroupScope scope=VSG_SCOPE_SELF, byte relative=0)
Get a resolver for the scope.
Resolver object to be used for houses (feature 07 spritegroups).
Definition: newgrf_house.h:51
uint16 initial_random_bits
Random bits during construction checks.
Definition: newgrf_house.h:25
uint16 HouseID
OpenTTD ID of house types.
Definition: house_type.h:13
Callbacks that NewGRFs could implement.
Action 2 handling.
CargoTypes watched_cargo_triggers
Cargo types that triggered the watched cargo callback.
Definition: newgrf_house.h:26
HouseID house_id
Type of house being queried.
Definition: newgrf_house.h:21
Scope resolver for houses.
Definition: newgrf_house.h:20
Scope resolver for a town.
Definition: newgrf_town.h:22
bool not_yet_constructed
True for construction check.
Definition: newgrf_house.h:24
Resolved object itself.
void DecreaseBuildingCount(Town *t, HouseID house_id)
DecreaseBuildingCount() Decrease the number of a building when it is deleted.
uint8 class_id
The class id within the grf file.
Definition: newgrf_house.h:84
void IncreaseBuildingCount(Town *t, HouseID house_id)
IncreaseBuildingCount() Increase the count of a building when it has been added by a town...
TileIndex tile
Tile of this house.
Definition: newgrf_house.h:22
ScopeResolver * GetScope(VarSpriteGroupScope scope=VSG_SCOPE_SELF, byte relative=0) override
Get a resolver for the scope.
Definition: newgrf_house.h:59
uint32 GetRandomBits() const override
Get a few random bits.
uint32 TileIndex
The index/ID of a Tile.
Definition: tile_type.h:78
Related object of the resolved one.
Town data structure.
Definition: town.h:53
uint32 GetTriggers() const override
Get the triggers.
CallbackID
List of implemented NewGRF callbacks.
Functions to handle the town part of NewGRF towns.
uint32 grfid
The GRF ID of the file this class belongs to.
Definition: newgrf_house.h:83
Generic &#39;commands&#39; that can be performed on all tiles.