| OpenTTD
    | 
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 "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_NONE, ETP_RAINFOREST, ETP_ALL } | 
| 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. | |
| static void | PlantTreesOnTile (TileIndex tile, TreeType treetype, uint count, uint growth) | 
| Creates a tree tile Ground type and density is preserved. | |
| static TreeType | GetRandomTreeType (TileIndex tile, uint seed) | 
| Get a random TreeType for the given tile based on a given seed. | |
| static void | PlaceTree (TileIndex tile, uint32 r) | 
| Make a random tree tile of the given tile. | |
| static void | PlaceTreeGroups (uint num_groups) | 
| Creates a number of tree groups. | |
| static void | PlaceTreeAtSameHeight (TileIndex tile, int height) | 
| Place a tree at the same height as an existing tree. | |
| void | PlaceTreesRandomly () | 
| Place some trees randomly. | |
| void | GenerateTrees () | 
| Place new trees. | |
| CommandCost | CmdPlantTree (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) | 
| Plant a tree. | |
| static void | DrawTile_Trees (TileInfo *ti) | 
| static int | GetSlopePixelZ_Trees (TileIndex tile, uint x, uint y) | 
| static Foundation | GetFoundation_Trees (TileIndex tile, Slope tileh) | 
| 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 void | TileLoop_Trees (TileIndex tile) | 
| void | OnTick_Trees () | 
| static TrackStatus | GetTileTrackStatus_Trees (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side) | 
| static void | ChangeTileOwner_Trees (TileIndex tile, Owner old_owner, Owner new_owner) | 
| void | InitializeTrees () | 
| static CommandCost | TerraformTile_Trees (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) | 
| Variables | |
| byte | _trees_tick_ctr | 
| Determines when to consider building more trees. | |
| static const uint16 | DEFAULT_TREE_STEPS = 1000 | 
| Default number of attempts for placing trees. | |
| static const uint16 | DEFAULT_RAINFOREST_TREE_STEPS = 15000 | 
| Default number of attempts for placing extra trees at rainforest in tropic. | |
| static const uint16 | 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?
| ETP_NONE | Place trees on no tiles. | 
| ETP_RAINFOREST | Place trees only on rainforest tiles. | 
| ETP_ALL | Place trees on all tiles. | 
Definition at line 46 of file tree_cmd.cpp.
| enum TreePlacer | 
List of tree placer algorithm.
This enumeration defines all possible tree placer algorithm in the game.
| TP_NONE | No tree placer algorithm. | 
| TP_ORIGINAL | The original algorithm. | 
| TP_IMPROVED | A 'improved' algorithm. | 
Definition at line 39 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 67 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 PlaceTreeAtSameHeight(), PlaceTreeGroups(), PlaceTreesRandomly(), and PlantTreesOnTile().
| CommandCost CmdPlantTree | ( | TileIndex | tile, | 
| DoCommandFlag | flags, | ||
| uint32 | p1, | ||
| uint32 | p2, | ||
| const char * | text | ||
| ) | 
Plant a tree.
| tile | end tile of area-drag | 
| flags | type of operation | 
| p1 | tree type, TREE_INVALID means random. | 
| p2 | start tile of area-drag of tree plantation | 
| text | unused | 
Definition at line 335 of file tree_cmd.cpp.
References _current_company, _settings_game, CommandCost::AddCost(), AddTreeCount(), ChangeTownRating(), CLEAR_FIELDS, CLEAR_ROCKS, ClosestTownFromTile(), CMD_ERROR, CMD_LANDSCAPE_CLEAR, DC_EXEC, EconomySettings::dist_local_authority, DoCommand(), GameSettings::economy, EXPENSES_OTHER, CommandCost::Failed(), GameSettings::game_creation, GB(), CommandCost::GetCost(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::GetIfValid(), GetRandomTreeType(), GetRawClearGround(), GetTileSlope(), GetTileType(), GetTreeCount(), GetTropicZone(), INVALID_STRING_ID, IsBridgeAbove(), IsCoast(), IsInsideBS(), IsInsideMM(), IsSlopeWithOneCornerRaised(), IsTileType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), GameCreationSettings::landscape, MapSize(), MarkTileDirtyByTile(), MP_CLEAR, MP_TREES, MP_WATER, PlantTreesOnTile(), return_cmd_error, SetTropicZone(), TILE_AREA_LOOP, TREE_CACTUS, TREE_INVALID, CompanyProperties::tree_limit, TREE_RAINFOREST, TREE_SUB_TROPICAL, TREE_TOYLAND, TROPICZONE_DESERT, TROPICZONE_NORMAL, and TROPICZONE_RAINFOREST.
| 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 300 of file tree_cmd.cpp.
References _settings_game, DEFAULT_RAINFOREST_TREE_STEPS, DEFAULT_TREE_STEPS, GameSettings::game_creation, GB(), GWP_TREE, GameCreationSettings::landscape, PlaceTreeGroups(), PlaceTreesRandomly(), ScaleByMapSize(), SetGeneratingWorldProgress(), TP_IMPROVED, TP_NONE, TP_ORIGINAL, and GameCreationSettings::tree_placer.
Referenced by _GenerateWorld().
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 132 of file tree_cmd.cpp.
References _settings_game, GameSettings::game_creation, GetTropicZone(), GameCreationSettings::landscape, TREE_CACTUS, TREE_COUNT_RAINFOREST, TREE_COUNT_SUB_ARCTIC, TREE_COUNT_SUB_TROPICAL, TREE_COUNT_TEMPERATE, TREE_COUNT_TOYLAND, TREE_INVALID, TREE_RAINFOREST, TREE_SUB_ARCTIC, TREE_SUB_TROPICAL, TREE_TEMPERATE, TREE_TOYLAND, TROPICZONE_DESERT, and TROPICZONE_NORMAL.
Referenced by CmdPlantTree(), and 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 162 of file tree_cmd.cpp.
References GB(), GetRandomTreeType(), GetTreeGround(), min(), PlantTreesOnTile(), SetTreeCounter(), SetTreeGroundDensity(), TREE_GROUND_ROUGH_SNOW, TREE_GROUND_SHORE, TREE_GROUND_SNOW_DESERT, and TREE_INVALID.
Referenced by PlaceTreeAtSameHeight(), PlaceTreeGroups(), and PlaceTreesRandomly().
| 
 | 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 217 of file tree_cmd.cpp.
References abs(), CanPlantTreesOnTile(), DEFAULT_TREE_STEPS, Delta(), GB(), GetTileZ(), INVALID_TILE, PlaceTree(), and TileAddWrap().
Referenced by PlaceTreesRandomly().
| 
 | 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 186 of file tree_cmd.cpp.
References abs(), CanPlantTreesOnTile(), DEFAULT_TREE_STEPS, GB(), GWP_TREE, IncreaseGeneratingWorldProgress(), INVALID_TILE, PlaceTree(), RandomTile, and TileAddWrap().
Referenced by GenerateTrees().
| void PlaceTreesRandomly | ( | ) | 
Place some trees randomly.
This function just place some trees randomly on the map.
Definition at line 246 of file tree_cmd.cpp.
References _settings_game, CanPlantTreesOnTile(), DEFAULT_RAINFOREST_TREE_STEPS, DEFAULT_TREE_STEPS, EDITOR_TREE_DIV, GameSettings::game_creation, GetSnowLine(), GetTileZ(), GetTropicZone(), GWP_TREE, IncreaseGeneratingWorldProgress(), GameCreationSettings::landscape, PlaceTree(), PlaceTreeAtSameHeight(), RandomTileSeed(), ScaleByMapSize(), TP_IMPROVED, GameCreationSettings::tree_placer, and TROPICZONE_RAINFOREST.
Referenced by GenerateTrees(), and BuildTreesWindow::OnClick().
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 92 of file tree_cmd.cpp.
References CanPlantTreesOnTile(), CLEAR_GRASS, CLEAR_ROUGH, CLEAR_SNOW, GetClearDensity(), GetClearGround(), GetRawClearGround(), GetTileType(), MakeTree(), 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 CmdPlantTree(), and PlaceTree().
| const TileTypeProcs _tile_type_trees_procs | 
| byte _trees_tick_ctr | 
Determines when to consider building more trees.
Definition at line 53 of file tree_cmd.cpp.
 1.8.1.2
 1.8.1.2