OpenTTD
|
Functions related to the landscape (slopes etc.). More...
#include "stdafx.h"
#include "heightmap.h"
#include "clear_map.h"
#include "spritecache.h"
#include "viewport_func.h"
#include "command_func.h"
#include "landscape.h"
#include "void_map.h"
#include "tgp.h"
#include "genworld.h"
#include "fios.h"
#include "date_func.h"
#include "water.h"
#include "effectvehicle_func.h"
#include "landscape_type.h"
#include "animated_tile_func.h"
#include "core/random_func.hpp"
#include "object_base.h"
#include "company_func.h"
#include "pathfinder/npf/aystar.h"
#include "saveload/saveload.h"
#include <list>
#include <set>
#include "table/strings.h"
#include "table/sprites.h"
#include "safeguards.h"
#include "table/genland.h"
Go to the source code of this file.
Macros | |
#define | SET_MARK(x) marks.insert(x) |
#define | IS_MARKED(x) (marks.find(x) != marks.end()) |
Functions | |
uint | ApplyFoundationToSlope (Foundation f, Slope *s) |
Applies a foundation to a slope. | |
uint | GetPartialPixelZ (int x, int y, Slope corners) |
Determines height at given coordinate of a slope. | |
int | GetSlopePixelZ (int x, int y) |
int | GetSlopeZInCorner (Slope tileh, Corner corner) |
Determine the Z height of a corner relative to TileZ. | |
void | GetSlopePixelZOnEdge (Slope tileh, DiagDirection edge, int *z1, int *z2) |
Determine the Z height of the corners of a specific tile edge. | |
Slope | GetFoundationSlope (TileIndex tile, int *z) |
Get slope of a tile on top of a (possible) foundation If a tile does not have a foundation, the function returns the same as GetTileSlope. | |
bool | HasFoundationNW (TileIndex tile, Slope slope_here, uint z_here) |
bool | HasFoundationNE (TileIndex tile, Slope slope_here, uint z_here) |
void | DrawFoundation (TileInfo *ti, Foundation f) |
Draw foundation f at tile ti. | |
void | DoClearSquare (TileIndex tile) |
TrackStatus | GetTileTrackStatus (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) |
Returns information about trackdirs and signal states. | |
void | ChangeTileOwner (TileIndex tile, Owner old_owner, Owner new_owner) |
Change the owner of a tile. | |
void | GetTileDesc (TileIndex tile, TileDesc *td) |
bool | IsSnowLineSet () |
Has a snow line table already been loaded. | |
void | SetSnowLine (byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) |
Set a variable snow line, as loaded from a newgrf file. | |
byte | GetSnowLine () |
Get the current snow line, either variable or static. | |
byte | HighestSnowLine () |
Get the highest possible snow line height, either variable or static. | |
byte | LowestSnowLine () |
Get the lowest possible snow line height, either variable or static. | |
void | ClearSnowLine () |
Clear the variable snow line table and free the memory. | |
CommandCost | CmdLandscapeClear (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
Clear a piece of landscape. | |
CommandCost | CmdClearArea (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) |
Clear a big piece of landscape. | |
void | RunTileLoop () |
Gradually iterate over all tiles on the map, calling their TileLoopProcs once every 256 ticks. | |
void | InitializeLandscape () |
static void | GenerateTerrain (int type, uint flag) |
static void | CreateDesertOrRainForest () |
static bool | FindSpring (TileIndex tile, void *user_data) |
Find the spring of a river. | |
static bool | MakeLake (TileIndex tile, void *user_data) |
Make a connected lake; fill all tiles in the circular tile search that are connected. | |
static bool | FlowsDown (TileIndex begin, TileIndex end) |
Check whether a river at begin could (logically) flow down to end. | |
static int32 | River_EndNodeCheck (AyStar *aystar, OpenListNode *current) |
static int32 | River_CalculateG (AyStar *aystar, AyStarNode *current, OpenListNode *parent) |
static int32 | River_CalculateH (AyStar *aystar, AyStarNode *current, OpenListNode *parent) |
static void | River_GetNeighbours (AyStar *aystar, OpenListNode *current) |
static void | River_FoundEndNode (AyStar *aystar, OpenListNode *current) |
static uint | River_Hash (uint tile, uint dir) |
Simple hash function for river tiles to be used by AyStar. | |
static void | BuildRiver (TileIndex begin, TileIndex end) |
Actually build the river between the begin and end tiles using AyStar. | |
static bool | FlowRiver (TileIndex spring, TileIndex begin) |
Try to flow the river down from a given begin. | |
static void | CreateRivers () |
Actually (try to) create some rivers. | |
void | GenerateLandscape (byte mode) |
void | OnTick_Town () |
void | OnTick_Trees () |
void | OnTick_Station () |
void | OnTick_Industry () |
void | OnTick_Companies () |
Called every tick for updating some company info. | |
void | OnTick_LinkGraph () |
Spawn or join a link graph job or compress a link graph if any link graph is due to do so. | |
void | CallLandscapeTick () |
Variables | |
const TileTypeProcs | _tile_type_clear_procs |
const TileTypeProcs | _tile_type_rail_procs |
const TileTypeProcs | _tile_type_road_procs |
const TileTypeProcs | _tile_type_town_procs |
const TileTypeProcs | _tile_type_trees_procs |
const TileTypeProcs | _tile_type_station_procs |
const TileTypeProcs | _tile_type_water_procs |
const TileTypeProcs | _tile_type_void_procs |
const TileTypeProcs | _tile_type_industry_procs |
const TileTypeProcs | _tile_type_tunnelbridge_procs |
const TileTypeProcs | _tile_type_object_procs |
const TileTypeProcs *const | _tile_type_procs [16] |
Tile callback functions for each type of tile. | |
const byte | _slope_to_sprite_offset [32] |
landscape slope => sprite | |
static SnowLine * | _snow_line = NULL |
Description of the snow line throughout the year. | |
TileIndex | _cur_tileloop_tile |
static const byte | _genterrain_tbl_1 [5] = { 10, 22, 33, 37, 4 } |
static const byte | _genterrain_tbl_2 [5] = { 0, 0, 0, 0, 33 } |
static const uint | RIVER_HASH_SIZE = 8 |
The number of bits the hash for river finding should have. |
Functions related to the landscape (slopes etc.).
Definition in file landscape.cpp.
uint ApplyFoundationToSlope | ( | Foundation | f, |
Slope * | s | ||
) |
Applies a foundation to a slope.
f | The Foundation. |
s | The Slope to modify. |
Definition at line 99 of file landscape.cpp.
References FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetRailFoundationCorner(), HalftileSlope(), IsFoundation(), IsLeveledFoundation(), IsNonContinuousFoundation(), IsSpecialRailFoundation(), IsSteepSlope(), OppositeCorner(), SLOPE_FLAT, SLOPE_NE, SLOPE_NW, SLOPE_SE, SLOPE_SW, SlopeWithOneCornerRaised(), and SlopeWithThreeCornersRaised().
Referenced by ApplyPixelFoundationToSlope(), CheckBridgeSlopeNorth(), CheckBridgeSlopeSouth(), DrawRailCatenaryRailway(), FloodHalftile(), GetBridgeHeight(), GetFoundationSlope(), HasBridgeFlatRamp(), and TestAutoslopeOnRailTile().
Actually build the river between the begin and end tiles using AyStar.
begin | The begin of the river. |
end | The end of the river. |
Definition at line 1081 of file landscape.cpp.
References AyStar::AddStartNode(), AyStar::Free(), AyStar::Init(), INVALID_TRACKDIR, AyStar::Main(), MemSetT(), and River_Hash().
Referenced by FlowRiver().
Change the owner of a tile.
tile | Tile to change |
old_owner | Current owner of the tile |
new_owner | New owner of the tile |
Definition at line 520 of file landscape.cpp.
References GetTileType().
Referenced by AfterLoadGame(), and ChangeOwnershipOfCompanyItems().
CommandCost CmdClearArea | ( | TileIndex | tile, |
DoCommandFlag | flags, | ||
uint32 | p1, | ||
uint32 | p2, | ||
const char * | text | ||
) |
Clear a big piece of landscape.
tile | end tile of area dragging |
flags | of operation to conduct |
p1 | start tile of area dragging |
p2 | various bitstuffed data. bit 0: Whether to use the Orthogonal (0) or Diagonal (1) iterator. |
text | unused |
Definition at line 662 of file landscape.cpp.
References _current_company, _pause_mode, CommandCost::AddCost(), CompanyProperties::clear_limit, CMD_ERROR, CMD_LANDSCAPE_CLEAR, CreateEffectVehicleAbove(), DC_AUTO, DC_BANKRUPT, DC_EXEC, DoCommand(), EV_EXPLOSION_LARGE, EV_EXPLOSION_SMALL, EXPENSES_CONSTRUCTION, CommandCost::Failed(), GB(), GetAvailableMoneyForCommand(), CommandCost::GetCost(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), HasBit(), INVALID_TILE, MapSize(), PM_UNPAUSED, TILE_SIZE, TileX(), and TileY().
CommandCost CmdLandscapeClear | ( | TileIndex | tile, |
DoCommandFlag | flags, | ||
uint32 | p1, | ||
uint32 | p2, | ||
const char * | text | ||
) |
Clear a piece of landscape.
tile | tile to clear |
flags | of operation to conduct |
p1 | unused |
p2 | unused |
text | unused |
Definition at line 612 of file landscape.cpp.
References _current_company, CommandCost::AddCost(), CompanyProperties::clear_limit, DC_AUTO, DC_BANKRUPT, DC_EXEC, DC_FORCE_CLEAR_TILE, DC_NO_WATER, EXPENSES_CONSTRUCTION, FindClearedObject(), ClearedObjectArea::first_tile, GB(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), GetTileType(), GetWaterClass(), HasTileWaterClass(), IsCoastTile(), IsTileOnWater(), IsWaterTile(), return_cmd_error, and WATER_CLASS_CANAL.
void DrawFoundation | ( | TileInfo * | ti, |
Foundation | f | ||
) |
Draw foundation f at tile ti.
Updates ti.
ti | Tile to draw foundation on |
f | Foundation to draw |
Definition at line 390 of file landscape.cpp.
References AddSortableSpriteToDraw(), ApplyPixelFoundationToSlope(), FOUNDATION_INCLINED_X, FOUNDATION_INCLINED_Y, FOUNDATION_STEEP_BOTH, FOUNDATION_STEEP_LOWER, GetFoundationPixelSlope(), GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetRailFoundationCorner(), IsFoundation(), IsInclinedFoundation(), IsLeveledFoundation(), IsNonContinuousFoundation(), IsSpecialRailFoundation(), IsSteepSlope(), OffsetGroundSprite(), SLOPE_EW, SLOPE_NE, SLOPE_NS, SLOPE_STEEP, SLOPE_SW, SlopeWithOneCornerRaised(), SlopeWithThreeCornersRaised(), SPR_HALFTILE_FOUNDATION_BASE, TileInfo::tile, TILE_HEIGHT, TileInfo::tileh, TileInfo::x, TileInfo::y, and TileInfo::z.
Referenced by DrawRoadBits(), DrawTile_Road(), DrawTile_Town(), DrawTile_TunnelBridge(), and DrawTrackBits().
|
static |
Find the spring of a river.
tile | The tile to consider for being the spring. |
user_data | Ignored data. |
Definition at line 941 of file landscape.cpp.
References _settings_game, GameSettings::game_creation, GetTileMaxZ(), GetTropicZone(), INVALID_TILE, IsTileFlat(), IsWaterTile(), GameCreationSettings::landscape, TileAddWrap(), and TROPICZONE_RAINFOREST.
Referenced by CreateRivers().
Try to flow the river down from a given begin.
spring | The springing point of the river. |
begin | The begin point we are looking from; somewhere down hill from the spring. |
Definition at line 1108 of file landscape.cpp.
References _settings_game, BuildRiver(), CircularTileSearch(), DIAGDIR_BEGIN, DIAGDIR_END, DistanceManhattan(), FlowsDown(), GameSettings::game_creation, GetTropicZone(), IsTileFlat(), IsValidTile(), IsWaterTile(), GameCreationSettings::landscape, MakeLake(), MakeRiver(), GameCreationSettings::min_river_length, RandomRange(), TileHeight(), TileOffsByDiagDir(), and TROPICZONE_DESERT.
Referenced by CreateRivers().
Check whether a river at begin could (logically) flow down to end.
begin | The origin of the flow. |
end | The destination of the flow. |
Definition at line 1000 of file landscape.cpp.
References DistanceManhattan(), GetTileSlope(), IsInclinedSlope(), and SLOPE_FLAT.
Referenced by FlowRiver().
void GenerateLandscape | ( | byte | mode | ) |
Number of steps of landscape generation
< Loading a heightmap
< Terragenesis generator
< Original generator
< Extra steps needed for tropic landscape
< Extra steps for other landscapes
Definition at line 1211 of file landscape.cpp.
References _file_to_saveload, _settings_game, Clamp(), GameSettings::construction, CreateRivers(), CUSTOM_SEA_LEVEL_NUMBER_DIFFICULTY, FileToSaveLoad::detail_ftype, GameSettings::difficulty, FixSlopes(), ConstructionSettings::freeform_edges, GameSettings::game_creation, GB(), GenerateTerrainPerlin(), GWM_HEIGHTMAP, GWP_LANDSCAPE, IncreaseGeneratingWorldProgress(), GameCreationSettings::land_generator, GameCreationSettings::landscape, LG_TERRAGENESIS, LoadHeightmap(), MakeVoid(), MapSizeX(), MapSizeY(), FileToSaveLoad::name, DifficultySettings::quantity_sea_lakes, ScaleByMapSize(), SetGeneratingWorldProgress(), DifficultySettings::terrain_type, and TileXY().
Referenced by _GenerateWorld().
Get slope of a tile on top of a (possible) foundation If a tile does not have a foundation, the function returns the same as GetTileSlope.
tile | The tile of interest. |
z | returns the z of the foundation slope. (Can be NULL, if not needed) |
Definition at line 342 of file landscape.cpp.
References ApplyFoundationToSlope(), GetTileSlope(), and GetTileType().
Referenced by GetFoundationPixelSlope(), IsPossibleCrossing(), IsRoadAllowedHere(), and TileLoop_Water().
uint GetPartialPixelZ | ( | int | x, |
int | y, | ||
Slope | corners | ||
) |
Determines height at given coordinate of a slope.
x | x coordinate |
y | y coordinate |
corners | slope to examine |
Definition at line 152 of file landscape.cpp.
References GetHalftileSlopeCorner(), GetSlopeMaxPixelZ(), IsHalftileSlope(), RemoveHalftileSlope(), SLOPE_E, SLOPE_ELEVATED, SLOPE_ENW, SLOPE_EW, SLOPE_N, SLOPE_NE, SLOPE_NS, SLOPE_NW, SLOPE_NWS, SLOPE_S, SLOPE_SE, SLOPE_SEN, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_SW, SLOPE_W, and SLOPE_WSE.
Referenced by DrawRoadBits().
void GetSlopePixelZOnEdge | ( | Slope | tileh, |
DiagDirection | edge, | ||
int * | z1, | ||
int * | z2 | ||
) |
Determine the Z height of the corners of a specific tile edge.
tileh | The slope of the tile. |
edge | The edge of interest. |
z1 | Gets incremented by the height of the first corner of the edge. (near corner wrt. the camera) |
z2 | Gets incremented by the height of the second corner of the edge. (far corner wrt. the camera) |
Definition at line 313 of file landscape.cpp.
References GetHalftileSlopeCorner(), IsHalftileSlope(), RemoveHalftileSlope(), SLOPE_E, SLOPE_N, SLOPE_S, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_W, SlopeWithOneCornerRaised(), and TILE_HEIGHT.
Referenced by DrawBridgePillars().
Determine the Z height of a corner relative to TileZ.
tileh | The slope. |
corner | The corner. |
Definition at line 295 of file landscape.cpp.
References IsHalftileSlope(), SlopeWithOneCornerRaised(), and SteepSlope().
Referenced by GetSlopePixelZInCorner(), and TestAutoslopeOnRailTile().
TrackStatus GetTileTrackStatus | ( | TileIndex | tile, |
TransportType | mode, | ||
uint | sub_mode, | ||
DiagDirection | side | ||
) |
Returns information about trackdirs and signal states.
If there is any trackbit at 'side', return all trackdirbits. For TRANSPORT_ROAD, return no trackbits if there is no roadbit (of given subtype) at given side.
tile | tile to get info about |
mode | transport type |
sub_mode | for TRANSPORT_ROAD, roadtypes to check |
side | side we are entering from, INVALID_DIAGDIR to return all trackbits |
Definition at line 509 of file landscape.cpp.
References TileTypeProcs::get_tile_track_status_proc, and GetTileType().
Referenced by AfterLoadGame(), CheckRoadBlockedForOvertaking(), CYapfFollowShipT< Types >::CheckShipReverse(), DisasterTick_Submarine(), FixOwnerOfRailTrack(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GenericPlaceSignals(), GetDriveableTrackdirBits(), MaskWireBits(), OPFShipChooseTrack(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::QueryNewTileTrackStatus(), RoadFindPathToDest(), CYapfFollowRoadT< Types >::SetOriginFromVehiclePos(), RoadVehicle::TileMayHaveSlopedTrack(), TrainCheckIfLineEnds(), TrainController(), TryPathReserve(), TryReserveRailTrack(), UnreserveRailTrack(), UpdateSignalsInBuffer(), and YapfRoadVehicleFindNearestDepot().
|
static |
Make a connected lake; fill all tiles in the circular tile search that are connected.
tile | The tile to consider for lake making. |
user_data | The height of the lake. |
Definition at line 977 of file landscape.cpp.
References _settings_game, DIAGDIR_BEGIN, DIAGDIR_END, GameSettings::game_creation, GetTropicZone(), IsTileFlat(), IsValidTile(), IsWaterTile(), GameCreationSettings::landscape, MakeRiver(), TileHeight(), TileOffsByDiagDir(), and TROPICZONE_DESERT.
Referenced by FlowRiver().
void OnTick_Companies | ( | ) |
Called every tick for updating some company info.
Definition at line 697 of file company_cmd.cpp.
References _cur_company_tick_index, _next_competitor_start, CompanyProperties::bankrupt_asked, AI::CanStartNew(), DAY_TICKS, GenerateCompanyName(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), AI::GetStartNextTime(), HandleBankruptcyTakeover(), MAX_COMPANIES, MaybeStartNewCompany(), and CompanyProperties::name_1.
|
static |
Simple hash function for river tiles to be used by AyStar.
tile | The tile to hash. |
dir | The unused direction. |
Definition at line 1071 of file landscape.cpp.
References GB(), TileHash(), TileX(), and TileY().
Referenced by BuildRiver().
const byte _slope_to_sprite_offset[32] |
landscape slope => sprite
Referenced by SlopeToSpriteOffset().
const TileTypeProcs* const _tile_type_procs[16] |
Tile callback functions for each type of tile.
Definition at line 61 of file landscape.cpp.
Referenced by AfterLoadGame(), CmdTerraformLand(), VehicleEnterTile(), and ViewportAddLandscape().