OpenTTD Source  14.0-beta3
newgrf_house.cpp File Reference
#include "stdafx.h"
#include "debug.h"
#include "landscape.h"
#include "newgrf_house.h"
#include "newgrf_spritegroup.h"
#include "newgrf_town.h"
#include "newgrf_sound.h"
#include "company_func.h"
#include "company_base.h"
#include "town.h"
#include "genworld.h"
#include "newgrf_animation_base.h"
#include "newgrf_cargo.h"
#include "station_base.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  SearchNearbyHouseData
 Structure with user-data for SearchNearbyHouseXXX - functions. More...
 
struct  HouseAnimationBase
 Helper class for animation control. More...
 

Functions

static const GRFFileGetHouseSpecGrf (HouseID house_id)
 Retrieve the grf file associated with a house. More...
 
void ResetHouseClassIDs ()
 
HouseClassID AllocateHouseClassID (byte grf_class_id, uint32_t grfid)
 
void InitializeBuildingCounts ()
 
void IncreaseBuildingCount (Town *t, HouseID house_id)
 IncreaseBuildingCount() Increase the count of a building when it has been added by a town. More...
 
void DecreaseBuildingCount (Town *t, HouseID house_id)
 DecreaseBuildingCount() Decrease the number of a building when it is deleted. More...
 
static uint32_t GetNumHouses (HouseID house_id, const Town *town)
 
static uint32_t GetNearbyTileInformation (byte parameter, TileIndex tile, bool grf_version8)
 Get information about a nearby tile. More...
 
static bool SearchNearbyHouseID (TileIndex tile, void *user_data)
 Callback function to search a house by its HouseID. More...
 
static bool SearchNearbyHouseClass (TileIndex tile, void *user_data)
 Callback function to search a house by its classID. More...
 
static bool SearchNearbyHouseGRFID (TileIndex tile, void *user_data)
 Callback function to search a house by its grfID. More...
 
static uint32_t GetDistanceFromNearbyHouse (uint8_t parameter, TileIndex tile, HouseID house)
 This function will activate a search around a central tile, looking for some houses that fit the requested characteristics. More...
 
uint16_t GetHouseCallback (CallbackID callback, uint32_t param1, uint32_t param2, HouseID house_id, Town *town, TileIndex tile, bool not_yet_constructed, uint8_t initial_random_bits, CargoTypes watched_cargo_triggers)
 
static void DrawTileLayout (const TileInfo *ti, const TileLayoutSpriteGroup *group, byte stage, HouseID house_id)
 
void DrawNewHouseTile (TileInfo *ti, HouseID house_id)
 
uint16_t GetSimpleHouseCallback (CallbackID callback, uint32_t param1, uint32_t param2, const HouseSpec *spec, Town *town, TileIndex tile, CargoTypes extra_data)
 
void AnimateNewHouseTile (TileIndex tile)
 
void AnimateNewHouseConstruction (TileIndex tile)
 
bool CanDeleteHouse (TileIndex tile)
 
static void AnimationControl (TileIndex tile, uint16_t random_bits)
 
bool NewHouseTileLoop (TileIndex tile)
 
static void DoTriggerHouse (TileIndex tile, HouseTrigger trigger, byte base_random, bool first)
 
void TriggerHouse (TileIndex t, HouseTrigger trigger)
 
void DoWatchedCargoCallback (TileIndex tile, TileIndex origin, CargoTypes trigger_cargoes, uint16_t random)
 Run the watched cargo accepted callback for a single house tile. More...
 
void WatchedCargoCallback (TileIndex tile, CargoTypes trigger_cargoes)
 Run watched cargo accepted callback for a house. More...
 

Variables

static BuildingCounts< uint32_t > _building_counts
 
static std::array< HouseClassMapping, HOUSE_CLASS_MAX_class_mapping
 
HouseOverrideManager _house_mngr (NEW_HOUSE_OFFSET, NUM_HOUSES, INVALID_HOUSE_ID)
 

Detailed Description

Implementation of NewGRF houses.

Definition in file newgrf_house.cpp.

Function Documentation

◆ DecreaseBuildingCount()

void DecreaseBuildingCount ( Town t,
HouseID  house_id 
)

DecreaseBuildingCount() Decrease the number of a building when it is deleted.

Parameters
tThe town that the building was built in
house_idThe id of the house being removed

Definition at line 131 of file newgrf_house.cpp.

References TownCache::building_counts, Town::cache, and HouseSpec::class_id.

Referenced by DoClearTownHouseHelper().

◆ DoWatchedCargoCallback()

void DoWatchedCargoCallback ( TileIndex  tile,
TileIndex  origin,
CargoTypes  trigger_cargoes,
uint16_t  random 
)

Run the watched cargo accepted callback for a single house tile.

Parameters
tileThe house tile.
originThe triggering tile.
trigger_cargoesCargo types that triggered the callback.
randomRandom bits.

Definition at line 642 of file newgrf_house.cpp.

◆ GetDistanceFromNearbyHouse()

static uint32_t GetDistanceFromNearbyHouse ( uint8_t  parameter,
TileIndex  tile,
HouseID  house 
)
static

This function will activate a search around a central tile, looking for some houses that fit the requested characteristics.

Parameters
parameterthat is given by the callback. bits 0..6 radius of the search bits 7..8 search type i.e.: 0 = houseID/ 1 = classID/ 2 = grfID
tileTileIndex from which to start the search
housethe HouseID that is associated to the house, the callback is called for
Returns
the Manhattan distance from the center tile, if any, and 0 if failure

Definition at line 270 of file newgrf_house.cpp.

References CircularTileSearch(), DistanceManhattan(), GB(), GetHouseNorthPart(), SearchNearbyHouseData::hs, lengthof, SearchNearbyHouseData::north_tile, SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), and SearchNearbyHouseID().

◆ GetHouseSpecGrf()

static const GRFFile* GetHouseSpecGrf ( HouseID  house_id)
static

Retrieve the grf file associated with a house.

Parameters
house_idHouse to query.
Returns
The associated GRF file (may be nullptr).

Definition at line 37 of file newgrf_house.cpp.

References HouseSpec::grf_prop, and GRFFilePropsBase< Tcnt >::grffile.

◆ GetNearbyTileInformation()

static uint32_t GetNearbyTileInformation ( byte  parameter,
TileIndex  tile,
bool  grf_version8 
)
static

Get information about a nearby tile.

Parameters
parameterfrom callback. It's in fact a pair of coordinates
tileTileIndex from which the callback was initiated
grf_version8True, if we are dealing with a new NewGRF which uses GRF version >= 8.
Returns
a construction of bits obeying the newgrf format

Definition at line 177 of file newgrf_house.cpp.

References GetNearbyTile().

◆ IncreaseBuildingCount()

void IncreaseBuildingCount ( Town t,
HouseID  house_id 
)

IncreaseBuildingCount() Increase the count of a building when it has been added by a town.

Parameters
tThe town that the building is being built in
house_idThe id of the house being added

Definition at line 112 of file newgrf_house.cpp.

References TownCache::building_counts, Town::cache, and HouseSpec::class_id.

Referenced by ClearMakeHouseTile().

◆ SearchNearbyHouseClass()

static bool SearchNearbyHouseClass ( TileIndex  tile,
void *  user_data 
)
static

Callback function to search a house by its classID.

Parameters
tileTileIndex to be examined
user_dataSearchNearbyHouseData
Returns
true or false, if found or not

Definition at line 219 of file newgrf_house.cpp.

References HouseSpec::class_id, GetHouseNorthPart(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, SearchNearbyHouseData::hs, IsTileType(), MP_HOUSE, and SearchNearbyHouseData::north_tile.

Referenced by GetDistanceFromNearbyHouse().

◆ SearchNearbyHouseGRFID()

static bool SearchNearbyHouseGRFID ( TileIndex  tile,
void *  user_data 
)
static

Callback function to search a house by its grfID.

Parameters
tileTileIndex to be examined
user_dataSearchNearbyHouseData
Returns
true or false, if found or not

Definition at line 243 of file newgrf_house.cpp.

References GetHouseNorthPart(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, SearchNearbyHouseData::hs, IsTileType(), MP_HOUSE, and SearchNearbyHouseData::north_tile.

Referenced by GetDistanceFromNearbyHouse().

◆ SearchNearbyHouseID()

static bool SearchNearbyHouseID ( TileIndex  tile,
void *  user_data 
)
static

Callback function to search a house by its HouseID.

Parameters
tileTileIndex to be examined
user_dataSearchNearbyHouseData
Returns
true or false, if found or not

Definition at line 195 of file newgrf_house.cpp.

References GetHouseNorthPart(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, SearchNearbyHouseData::hs, IsTileType(), GRFFilePropsBase< Tcnt >::local_id, MP_HOUSE, and SearchNearbyHouseData::north_tile.

Referenced by GetDistanceFromNearbyHouse().

◆ WatchedCargoCallback()

void WatchedCargoCallback ( TileIndex  tile,
CargoTypes  trigger_cargoes 
)

Run watched cargo accepted callback for a house.

Parameters
tileHouse tile.
trigger_cargoesTriggering cargo types.
Precondition
IsTileType(t, MP_HOUSE)

Definition at line 655 of file newgrf_house.cpp.

References GetHouseType(), IsTileType(), MP_HOUSE, and HouseSpec::watched_cargoes.

Referenced by TriggerWatchedCargoCallbacks().