OpenTTD Source
20241108-master-g80f628063a
|
Handling of tree tiles. More...
#include "stdafx.h"
#include "clear_map.h"
#include "landscape.h"
#include "tree_map.h"
#include "viewport_func.h"
#include "command_func.h"
#include "town.h"
#include "genworld.h"
#include "clear_func.h"
#include "company_func.h"
#include "sound_func.h"
#include "water.h"
#include "company_base.h"
#include "core/random_func.hpp"
#include "newgrf_generic.h"
#include "timer/timer_game_tick.h"
#include "tree_cmd.h"
#include "landscape_cmd.h"
#include "table/strings.h"
#include "table/tree_land.h"
#include "table/clear_land.h"
#include "safeguards.h"
Go to the source code of this file.
Data Structures | |
struct | TreeListEnt |
Enumerations | |
enum | TreePlacer { TP_NONE , TP_ORIGINAL , TP_IMPROVED } |
List of tree placer algorithm. More... | |
enum | ExtraTreePlacement { ETP_NO_SPREAD , ETP_SPREAD_RAINFOREST , ETP_SPREAD_ALL , ETP_NO_GROWTH_NO_SPREAD } |
Where to place trees while in-game? More... | |
Functions | |
static bool | CanPlantTreesOnTile (TileIndex tile, bool allow_desert) |
Tests if a tile can be converted to MP_TREES This is true for clear ground without farms or rocks. More... | |
static void | PlantTreesOnTile (TileIndex tile, TreeType treetype, uint count, TreeGrowthStage growth) |
Creates a tree tile Ground type and density is preserved. More... | |
static TreeType | GetRandomTreeType (TileIndex tile, uint seed) |
Get a random TreeType for the given tile based on a given seed. More... | |
static void | PlaceTree (TileIndex tile, uint32_t r) |
Make a random tree tile of the given tile. More... | |
static void | PlaceTreeGroups (uint num_groups) |
Creates a number of tree groups. More... | |
static void | PlaceTreeAtSameHeight (TileIndex tile, int height) |
Place a tree at the same height as an existing tree. More... | |
void | PlaceTreesRandomly () |
Place some trees randomly. More... | |
uint | PlaceTreeGroupAroundTile (TileIndex tile, TreeType treetype, uint radius, uint count, bool set_zone) |
Place some trees in a radius around a tile. More... | |
void | GenerateTrees () |
Place new trees. More... | |
CommandCost | CmdPlantTree (DoCommandFlag flags, TileIndex tile, TileIndex start_tile, uint8_t tree_to_plant, bool diagonal) |
Plant a tree. More... | |
static void | DrawTile_Trees (TileInfo *ti) |
static int | GetSlopePixelZ_Trees (TileIndex tile, uint x, uint y, bool) |
static Foundation | GetFoundation_Trees (TileIndex, Slope) |
static CommandCost | ClearTile_Trees (TileIndex tile, DoCommandFlag flags) |
static void | GetTileDesc_Trees (TileIndex tile, TileDesc *td) |
static void | TileLoopTreesDesert (TileIndex tile) |
static void | TileLoopTreesAlps (TileIndex tile) |
static bool | CanPlantExtraTrees (TileIndex tile) |
static void | TileLoop_Trees (TileIndex tile) |
bool | DecrementTreeCounter () |
Decrement the tree tick counter. More... | |
void | OnTick_Trees () |
static TrackStatus | GetTileTrackStatus_Trees (TileIndex, TransportType, uint, DiagDirection) |
static void | ChangeTileOwner_Trees (TileIndex, Owner, Owner) |
void | InitializeTrees () |
static CommandCost | TerraformTile_Trees (TileIndex tile, DoCommandFlag flags, int, Slope) |
Variables | |
uint8_t | _trees_tick_ctr |
Determines when to consider building more trees. | |
static const uint16_t | DEFAULT_TREE_STEPS = 1000 |
Default number of attempts for placing trees. | |
static const uint16_t | DEFAULT_RAINFOREST_TREE_STEPS = 15000 |
Default number of attempts for placing extra trees at rainforest in tropic. | |
static const uint16_t | EDITOR_TREE_DIV = 5 |
Game editor tree generation divisor factor. | |
const TileTypeProcs | _tile_type_trees_procs |
Handling of tree tiles.
Definition in file tree_cmd.cpp.
enum ExtraTreePlacement |
Where to place trees while in-game?
Definition at line 47 of file tree_cmd.cpp.
enum TreePlacer |
List of tree placer algorithm.
This enumeration defines all possible tree placer algorithm in the game.
Enumerator | |
---|---|
TP_NONE | No tree placer algorithm. |
TP_ORIGINAL | The original algorithm. |
TP_IMPROVED | A 'improved' algorithm. |
Definition at line 40 of file tree_cmd.cpp.
|
static |
Tests if a tile can be converted to MP_TREES This is true for clear ground without farms or rocks.
tile | the tile of interest |
allow_desert | Allow planting trees on CLEAR_DESERT? |
Definition at line 69 of file tree_cmd.cpp.
References CLEAR_DESERT, CLEAR_FIELDS, CLEAR_ROCKS, GetRawClearGround(), GetTileSlope(), GetTileType(), IsBridgeAbove(), IsClearGround(), IsCoast(), IsSlopeWithOneCornerRaised(), MP_CLEAR, and MP_WATER.
Referenced by PlantTreesOnTile().
CommandCost CmdPlantTree | ( | DoCommandFlag | flags, |
TileIndex | tile, | ||
TileIndex | start_tile, | ||
uint8_t | tree_to_plant, | ||
bool | diagonal | ||
) |
Plant a tree.
flags | type of operation |
tile | end tile of area-drag |
start_tile | start tile of area-drag of tree plantation |
tree_to_plant | tree type, TREE_INVALID means random. |
diagonal | Whether to use the Orthogonal (false) or Diagonal (true) iterator. |
Definition at line 389 of file tree_cmd.cpp.
References CMD_ERROR, EXPENSES_OTHER, INVALID_STRING_ID, IsInsideBS(), Map::Size(), and TREE_INVALID.
bool DecrementTreeCounter | ( | ) |
Decrement the tree tick counter.
The interval is scaled by map size to allow for the same density regardless of size. Adjustment for map sizes below the standard 256 * 256 are handled earlier.
Definition at line 821 of file tree_cmd.cpp.
References _trees_tick_ctr, MAX_MAP_SIZE_BITS, MIN_MAP_SIZE_BITS, and Map::ScaleBySize().
void GenerateTrees | ( | ) |
Place new trees.
This function takes care of the selected tree placer algorithm and place randomly the trees for a new game.
Definition at line 354 of file tree_cmd.cpp.
References _settings_game, GameSettings::game_creation, GameCreationSettings::landscape, TP_NONE, TP_ORIGINAL, and GameCreationSettings::tree_placer.
Get a random TreeType for the given tile based on a given seed.
This function returns a random TreeType which can be placed on the given tile. The seed for randomness must be less or equal 256, use GB on the value of Random() to get such a value.
tile | The tile to get a random TreeType from |
seed | The seed for randomness, must be less or equal 256 |
Definition at line 135 of file tree_cmd.cpp.
References _settings_game, GameSettings::game_creation, and GameCreationSettings::landscape.
Referenced by PlaceTree().
|
static |
Make a random tree tile of the given tile.
Create a new tree-tile for the given tile. The second parameter is used for randomness like type and number of trees.
tile | The tile to make a tree-tile from |
r | The randomness value from a Random() value |
Definition at line 165 of file tree_cmd.cpp.
References GB(), GetRandomTreeType(), GetTreeGround(), MarkTileDirtyByTile(), PlantTreesOnTile(), SetTreeGroundDensity(), TREE_GROUND_ROUGH_SNOW, TREE_GROUND_SHORE, TREE_GROUND_SNOW_DESERT, and TREE_INVALID.
|
static |
Place a tree at the same height as an existing tree.
Add a new tree around the given tile which is at the same height or at some offset (2 units) of it.
tile | The base tile to add a new tree somewhere around |
height | The height (like the one from the tile) |
Definition at line 218 of file tree_cmd.cpp.
References DEFAULT_TREE_STEPS.
uint PlaceTreeGroupAroundTile | ( | TileIndex | tile, |
TreeType | treetype, | ||
uint | radius, | ||
uint | count, | ||
bool | set_zone | ||
) |
Place some trees in a radius around a tile.
The trees are placed in an quasi-normal distribution around the indicated tile, meaning that while the radius does define a square, the distribution inside the square will be roughly circular.
tile | Tile to place trees around. |
treetype | Type of trees to place. Must be a valid tree type for the climate. |
radius | Maximum distance (on each axis) from tile to place trees. |
count | Maximum number of trees to place. |
set_zone | Whether to create a rainforest zone when placing rainforest trees. |
Definition at line 307 of file tree_cmd.cpp.
|
static |
Creates a number of tree groups.
The number of trees in each group depends on how many trees are actually placed around the given tile.
num_groups | Number of tree groups to place. |
Definition at line 187 of file tree_cmd.cpp.
References DEFAULT_TREE_STEPS, and RandomTile.
void PlaceTreesRandomly | ( | ) |
Place some trees randomly.
This function just place some trees randomly on the map.
Definition at line 247 of file tree_cmd.cpp.
References DEFAULT_TREE_STEPS, and Map::ScaleBySize().
|
static |
Creates a tree tile Ground type and density is preserved.
tile | where to plant the trees. |
treetype | The type of the tree |
count | the number of trees (minus 1) |
growth | the growth status |
Definition at line 94 of file tree_cmd.cpp.
References CanPlantTreesOnTile(), CLEAR_GRASS, CLEAR_ROUGH, CLEAR_SNOW, ClearNeighbourNonFloodingStates(), GetClearDensity(), GetClearGround(), GetRawClearGround(), GetTileType(), MP_CLEAR, MP_WATER, TREE_GROUND_GRASS, TREE_GROUND_ROUGH, TREE_GROUND_ROUGH_SNOW, TREE_GROUND_SHORE, TREE_GROUND_SNOW_DESERT, and TREE_INVALID.
Referenced by PlaceTree().
|
extern |
Definition at line 52 of file landscape.cpp.