OpenTTD Source
12.0-beta2
|
#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 "framerate_type.h"
#include <array>
#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 | |
Point | InverseRemapCoords2 (int x, int y, bool clamp_to_map, bool *clamped) |
Map 2D viewport or smallmap coordinate to 3D world or tile coordinate. More... | |
uint | ApplyFoundationToSlope (Foundation f, Slope *s) |
Applies a foundation to a slope. More... | |
uint | GetPartialPixelZ (int x, int y, Slope corners) |
Determines height at given coordinate of a slope. More... | |
int | GetSlopePixelZ (int x, int y) |
int | GetSlopePixelZOutsideMap (int x, int y) |
Return world z coordinate of a given point of a tile, also for tiles outside the map (virtual "black" tiles). More... | |
int | GetSlopeZInCorner (Slope tileh, Corner corner) |
Determine the Z height of a corner relative to TileZ. More... | |
void | GetSlopePixelZOnEdge (Slope tileh, DiagDirection edge, int *z1, int *z2) |
Determine the Z height of the corners of a specific tile edge. More... | |
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. More... | |
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. More... | |
void | DoClearSquare (TileIndex tile) |
TrackStatus | GetTileTrackStatus (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) |
Returns information about trackdirs and signal states. More... | |
void | ChangeTileOwner (TileIndex tile, Owner old_owner, Owner new_owner) |
Change the owner of a tile. More... | |
void | GetTileDesc (TileIndex tile, TileDesc *td) |
bool | IsSnowLineSet () |
Has a snow line table already been loaded. More... | |
void | SetSnowLine (byte table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) |
Set a variable snow line, as loaded from a newgrf file. More... | |
byte | GetSnowLine () |
Get the current snow line, either variable or static. More... | |
byte | HighestSnowLine () |
Get the highest possible snow line height, either variable or static. More... | |
byte | LowestSnowLine () |
Get the lowest possible snow line height, either variable or static. More... | |
void | ClearSnowLine () |
Clear the variable snow line table and free the memory. | |
CommandCost | CmdLandscapeClear (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text) |
Clear a piece of landscape. More... | |
CommandCost | CmdClearArea (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text) |
Clear a big piece of landscape. More... | |
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 (uint desert_tropic_line) |
static bool | FindSpring (TileIndex tile, void *user_data) |
Find the spring of a river. More... | |
static bool | MakeLake (TileIndex tile, void *user_data) |
Make a connected lake; fill all tiles in the circular tile search that are connected. More... | |
static bool | FlowsDown (TileIndex begin, TileIndex end) |
Check whether a river at begin could (logically) flow down to end. More... | |
static int32 | River_EndNodeCheck (const AyStar *aystar, const 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. More... | |
static void | BuildRiver (TileIndex begin, TileIndex end) |
Actually build the river between the begin and end tiles using AyStar. More... | |
static bool | FlowRiver (TileIndex spring, TileIndex begin) |
Try to flow the river down from a given begin. More... | |
static void | CreateRivers () |
Actually (try to) create some rivers. | |
static uint | CalculateCoverageLine (uint coverage, uint edge_multiplier) |
Calculate what height would be needed to cover N% of the landmass. More... | |
static void | CalculateSnowLine () |
Calculate the line from which snow begins. | |
static uint8 | CalculateDesertLine () |
Calculate the line (in height) between desert and tropic. More... | |
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 |
Tile callback functions for road tiles. | |
const TileTypeProcs | _tile_type_town_procs |
Tile callback functions for a town. | |
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. More... | |
const byte | _slope_to_sprite_offset [32] |
landscape slope => sprite More... | |
static SnowLine * | _snow_line = nullptr |
Description of the snow line throughout the year. More... | |
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 163 of file landscape.cpp.
References FOUNDATION_INCLINED_X, FOUNDATION_STEEP_BOTH, GetHalftileFoundationCorner(), GetHighestSlopeCorner(), GetRailFoundationCorner(), HalftileSlope(), IsFoundation(), IsLeveledFoundation(), IsNonContinuousFoundation(), IsSpecialRailFoundation(), IsSteepSlope(), OppositeCorner(), SLOPE_FLAT, and SlopeWithThreeCornersRaised().
Referenced by ApplyPixelFoundationToSlope(), 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 1164 of file landscape.cpp.
|
static |
Calculate what height would be needed to cover N% of the landmass.
The function allows both snow and desert/tropic line to be calculated. It tries to find the closests height which covers N% of the landmass; it can be below or above it.
Tropic has a mechanism where water and tropic tiles in mountains grow inside the desert. To better approximate the requested coverage, this is taken into account via an edge histogram, which tells how many neighbouring tiles are lower than the tiles of that height. The multiplier indicates how severe this has to be taken into account.
coverage | A value between 0 and 100 indicating a percentage of landmass that should be covered. |
edge_multiplier | How much effect neighbouring tiles that are of a lower height level have on the score. |
Definition at line 1314 of file landscape.cpp.
References abs(), AddTileIndexDiffCWrap(), DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, IsValidTile(), MapSize(), MapSizeX(), MapSizeY(), MAX_TILE_HEIGHT, TileHeight(), and TileIndexDiffCByDiagDir().
Referenced by CalculateDesertLine(), and CalculateSnowLine().
|
static |
Calculate the line (in height) between desert and tropic.
Definition at line 1400 of file landscape.cpp.
References _settings_game, CalculateCoverageLine(), GameCreationSettings::desert_coverage, and GameSettings::game_creation.
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 601 of file landscape.cpp.
References _tile_type_procs, and GetTileType().
CommandCost CmdClearArea | ( | TileIndex | tile, |
DoCommandFlag | flags, | ||
uint32 | p1, | ||
uint32 | p2, | ||
const std::string & | 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 743 of file landscape.cpp.
References _current_company, CMD_ERROR, DC_AUTO, DC_BANKRUPT, EXPENSES_CONSTRUCTION, GetAvailableMoneyForCommand(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), and MapSize().
CommandCost CmdLandscapeClear | ( | TileIndex | tile, |
DoCommandFlag | flags, | ||
uint32 | p1, | ||
uint32 | p2, | ||
const std::string & | text | ||
) |
Clear a piece of landscape.
tile | tile to clear |
flags | of operation to conduct |
p1 | unused |
p2 | unused |
text | unused |
Definition at line 693 of file landscape.cpp.
References CommandCost::AddCost(), DC_AUTO, DC_FORCE_CLEAR_TILE, EXPENSES_CONSTRUCTION, 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 471 of file landscape.cpp.
References FOUNDATION_STEEP_BOTH, GetFoundationPixelSlope(), IsFoundation(), and TileInfo::tile.
Referenced by DrawTile_Road().
|
static |
Find the spring of a river.
tile | The tile to consider for being the spring. |
user_data | Ignored data. |
Definition at line 1019 of file landscape.cpp.
References _settings_game, GameSettings::game_creation, IsTileFlat(), IsWaterTile(), and GameCreationSettings::landscape.
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 1190 of file landscape.cpp.
References _settings_game, DistanceManhattan(), GameSettings::game_creation, IsWaterTile(), GameCreationSettings::min_river_length, and TileHeight().
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 1082 of file landscape.cpp.
References DistanceManhattan(), GetTileSlope(), IsInclinedSlope(), and SLOPE_FLAT.
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 1406 of file landscape.cpp.
References _settings_game, GameSettings::game_creation, and GameCreationSettings::landscape.
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 nullptr, if not needed) |
Definition at line 423 of file landscape.cpp.
References _tile_type_procs, ApplyFoundationToSlope(), GetTileSlope(), and GetTileType().
Referenced by GetFoundationPixelSlope(), IsPossibleCrossing(), 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 216 of file landscape.cpp.
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 394 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.
int GetSlopePixelZOutsideMap | ( | int | x, |
int | y | ||
) |
Return world z
coordinate of a given point of a tile, also for tiles outside the map (virtual "black" tiles).
x | World X coordinate in tile "units", may be outside the map. |
y | World Y coordinate in tile "units", may be outside the map. |
Definition at line 358 of file landscape.cpp.
Determine the Z height of a corner relative to TileZ.
tileh | The slope. |
corner | The corner. |
Definition at line 376 of file landscape.cpp.
References IsHalftileSlope(), SlopeWithOneCornerRaised(), and SteepSlope().
Referenced by GetSlopePixelZInCorner().
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 590 of file landscape.cpp.
References _tile_type_procs, TileTypeProcs::get_tile_track_status_proc, and GetTileType().
Referenced by CheckRoadBlockedForOvertaking(), DisasterTick_Submarine(), FixOwnerOfRailTrack(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GenericPlaceSignals(), GetDriveableTrackdirBits(), GetTrackdirBitsForRoad(), RoadFindPathToDest(), RoadVehicle::TileMayHaveSlopedTrack(), TrainCheckIfLineEnds(), TrainController(), TryPathReserve(), TryReserveRailTrack(), UnreserveRailTrack(), and UpdateSignalsInBuffer().
Point InverseRemapCoords2 | ( | int | x, |
int | y, | ||
bool | clamp_to_map, | ||
bool * | clamped | ||
) |
Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.
Function takes into account height of tiles and foundations.
x | X viewport 2D coordinate. | |
y | Y viewport 2D coordinate. | |
clamp_to_map | Clamp the coordinate outside of the map to the closest, non-void tile within the map. | |
[out] | clamped | Whether coordinates were clamped. |
Definition at line 104 of file landscape.cpp.
Referenced by ClampViewportToMap(), SmallMapWindow::DrawMapIndicators(), and SmallMapWindow::SmallMapCenterOnCurrentPos().
|
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 1055 of file landscape.cpp.
References _settings_game, GameSettings::game_creation, IsTileFlat(), IsValidTile(), GameCreationSettings::landscape, and TileHeight().
|
static |
Simple hash function for river tiles to be used by AyStar.
tile | The tile to hash. |
dir | The unused direction. |
Definition at line 1154 of file landscape.cpp.
References GB(), RIVER_HASH_SIZE, TileHash(), TileX(), and TileY().
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 ChangeTileOwner(), GetFoundationSlope(), and GetTileTrackStatus().