OpenTTD Source
20241120-master-g6d3adc6169
|
Functions related to OTTD's landscape. More...
Go to the source code of this file.
Data Structures | |
struct | SnowLine |
Structure describing the height of the snow line each day of the year. More... | |
Functions | |
bool | IsSnowLineSet () |
Has a snow line table already been loaded. More... | |
void | SetSnowLine (uint8_t table[SNOW_LINE_MONTHS][SNOW_LINE_DAYS]) |
Set a variable snow line, as loaded from a newgrf file. More... | |
uint8_t | GetSnowLine () |
Get the current snow line, either variable or static. More... | |
uint8_t | HighestSnowLine () |
Get the highest possible snow line height, either variable or static. More... | |
uint8_t | 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. | |
int | GetSlopeZInCorner (Slope tileh, Corner corner) |
Determine the Z height of a corner relative to TileZ. More... | |
std::tuple< Slope, int > | GetFoundationSlope (TileIndex tile) |
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... | |
uint | GetPartialPixelZ (int x, int y, Slope corners) |
Determines height at given coordinate of a slope. More... | |
int | GetSlopePixelZ (int x, int y, bool ground_vehicle=false) |
Return world Z coordinate of a given point of a tile. More... | |
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... | |
void | GetSlopePixelZOnEdge (Slope tileh, DiagDirection edge, int &z1, int &z2) |
Determine the Z height of the corners of a specific tile edge. More... | |
int | GetSlopePixelZInCorner (Slope tileh, Corner corner) |
Determine the Z height of a corner relative to TileZ. More... | |
std::tuple< Slope, int > | GetFoundationPixelSlope (TileIndex tile) |
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 GetTilePixelSlope. More... | |
Point | RemapCoords (int x, int y, int z) |
Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap. More... | |
Point | RemapCoords2 (int x, int y) |
Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap. More... | |
Point | InverseRemapCoords (int x, int y) |
Map 2D viewport or smallmap coordinate to 3D world or tile coordinate. More... | |
Point | InverseRemapCoords2 (int x, int y, bool clamp_to_map=false, bool *clamped=nullptr) |
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 | ApplyPixelFoundationToSlope (Foundation f, Slope &s) |
Applies a foundation to a slope. More... | |
void | DrawFoundation (TileInfo *ti, Foundation f) |
Draw foundation f at tile ti. More... | |
bool | HasFoundationNW (TileIndex tile, Slope slope_here, uint z_here) |
bool | HasFoundationNE (TileIndex tile, Slope slope_here, uint z_here) |
void | DoClearSquare (TileIndex tile) |
void | RunTileLoop () |
Gradually iterate over all tiles on the map, calling their TileLoopProcs once every TILE_UPDATE_FREQUENCY ticks. | |
void | InitializeLandscape () |
bool | GenerateLandscape (uint8_t mode) |
Variables | |
static const uint | SNOW_LINE_MONTHS = 12 |
Number of months in the snow line table. | |
static const uint | SNOW_LINE_DAYS = 32 |
Number of days in each month in the snow line table. | |
Functions related to OTTD's landscape.
Definition in file landscape.h.
uint ApplyFoundationToSlope | ( | Foundation | f, |
Slope & | s | ||
) |
Applies a foundation to a slope.
f | The Foundation. |
s | The Slope to modify. |
Definition at line 170 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().
|
inline |
Applies a foundation to a slope.
f | The Foundation. |
s | The Slope to modify. |
Definition at line 126 of file landscape.h.
References ApplyFoundationToSlope(), and TILE_HEIGHT.
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 425 of file landscape.cpp.
References FOUNDATION_STEEP_BOTH, GetFoundationPixelSlope(), IsFoundation(), and TileInfo::tile.
Referenced by DrawTile_Road().
bool GenerateLandscape | ( | uint8_t | mode | ) |
< Loading a heightmap
< Terragenesis generator
< Original generator
< Extra steps needed for tropic landscape
< Extra steps for other landscapes
Definition at line 1551 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 GetTilePixelSlope.
tile | The tile of interest. |
Definition at line 65 of file landscape.h.
References GetFoundationSlope(), and TILE_HEIGHT.
Referenced by DrawFoundation().
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. |
Definition at line 382 of file landscape.cpp.
References _tile_type_procs, ApplyFoundationToSlope(), GetTileSlopeZ(), 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.
At the northern corner (0, 0) the result is always a multiple of TILE_HEIGHT. When the height is a fractional Z, then the height is rounded down. For example, when at the height is 0 at x = 0 and the height is 8 at x = 16 (actually x = 0 of the next tile), then height is 0 at x = 1, 1 at x = 2, and 7 at x = 15.
x | x coordinate (value from 0 to 15) |
y | y coordinate (value from 0 to 15) |
corners | slope to examine |
Definition at line 228 of file landscape.cpp.
Referenced by CheckPartialPixelZ().
int GetSlopePixelZ | ( | int | x, |
int | y, | ||
bool | ground_vehicle | ||
) |
Return world Z
coordinate of a given point of a tile.
Normally this is the Z of the ground/foundation at the given location, but in some cases the ground/foundation can differ from the Z coordinate that the (ground) vehicle passing over it would take. For example when entering a tunnel or bridge.
x | World X coordinate in tile "units". |
y | World Y coordinate in tile "units". |
ground_vehicle | Whether to get the Z coordinate of the ground vehicle, or the ground. |
Definition at line 303 of file landscape.cpp.
Referenced by CheckGroundVehiclesAtCorrectZ(), GetPCPElevation(), HandleCrashedAircraft(), GroundVehicle< T, Type >::UpdateZPosition(), and GroundVehicle< T, Type >::UpdateZPositionAndInclination().
Determine the Z height of a corner relative to TileZ.
tileh | The slope. |
corner | The corner. |
Definition at line 53 of file landscape.h.
References GetSlopeZInCorner(), and TILE_HEIGHT.
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 354 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 318 of file landscape.cpp.
Determine the Z height of a corner relative to TileZ.
tileh | The slope. |
corner | The corner. |
Definition at line 336 of file landscape.cpp.
References IsHalftileSlope(), SlopeWithOneCornerRaised(), and SteepSlope().
Referenced by GetSlopePixelZInCorner().
|
inline |
Map 2D viewport or smallmap coordinate to 3D world or tile coordinate.
Function assumes z == 0
. For other values of z
, add z
to y before the call.
x | X coordinate of the 2D coordinate. |
y | Y coordinate of the 2D coordinate. |
Definition at line 109 of file landscape.h.
Referenced by SmallMapWindow::SetNewScroll().
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 111 of file landscape.cpp.
Referenced by ClampViewportToMap(), SmallMapWindow::DrawMapIndicators(), and SmallMapWindow::SmallMapCenterOnCurrentPos().
|
inline |
Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
x | X world or tile coordinate (runs in SW direction in the 2D view). |
y | Y world or tile coordinate (runs in SE direction in the 2D view). |
z | Z world or tile coordinate (runs in N direction in the 2D view). |
Definition at line 79 of file landscape.h.
Referenced by MarkTileDirtyByTile(), IntroGameViewportCommand::PositionForViewport(), SelectGameWindow::ReadIntroGameViewportCommands(), Vehicle::UpdateBoundingBoxCoordinates(), Sign::UpdateVirtCoord(), and ViewportDrawBoundingBoxes().
|
inline |
Map 3D world or tile coordinate to equivalent 2D coordinate as used in the viewports and smallmap.
Same as RemapCoords, except the Z coordinate is read from the map.
x | X world or tile coordinate (runs in SW direction in the 2D view). |
y | Y world or tile coordinate (runs in SE direction in the 2D view). |
Definition at line 95 of file landscape.h.
Referenced by ClampViewportToMap(), Town::UpdateVirtCoord(), Station::UpdateVirtCoord(), and Waypoint::UpdateVirtCoord().