10#include "../../stdafx.h"
12#include "../../water.h"
13#include "../../genworld.h"
16#include "../../safeguards.h"
46 using Node = RiverBuilderTypes::NodeList::Item;
47 using Key = Node::Key;
65 void PfSetStartupNodes()
72 inline bool PfDetectDestination(
Node &n)
const
74 return n.GetTile() == this->
end_tile;
83 inline bool PfCalcEstimate(
Node &n)
86 assert(n.estimate >= n.parent->estimate);
90 inline void PfFollowNode(
Node &old_node)
102 inline char TransportTypeChar()
const
110 if (pf.FindPath(
nullptr) ==
false)
return;
113 for (
Node *node = pf.GetBestNode(); node !=
nullptr; node = node->parent) {
126 for (
Node *node = pf.GetBestNode(); node !=
nullptr; node = node->parent) {
127 const TileIndex center_tile = node->GetTile();
131 uint diameter = std::min(3u, (current_river_length / (long_river_length / 3u)) + 1u);
132 if (diameter <= 1)
continue;
151 YapfRiverBuilder::BuildRiver(start_tile, end_tile, spring_tile, main_river);
CYapfBaseT - A-star type path finder base class.
void AddNewNode(Node &n, const TrackFollower &tf)
AddNewNode() - called by Tderived::PfFollowNode() for each child node.
Node & CreateNewNode()
Calls NodeList::CreateNewNode() - allocates new node that can be filled and used as argument for AddS...
void AddStartupNode(Node &n)
Add new node (created by CreateNewNode and filled with data) into open list.
CYapfSegmentCostCacheNoneT - the formal only yapf cost cache provider that implements PfNodeCacheFetc...
Hash table based node list multi-container class.
Generate TileIndices around a center tile or tile area, with increasing distance.
TileIndex start_tile
Start tile of the river.
TileIndex end_tile
End tile of the river.
DiagDirection
Enumeration for diagonal directions.
@ DIAGDIR_END
Used for iterations.
@ DIAGDIR_BEGIN
Used for iterations.
@ LG_ORIGINAL
The original landscape generator.
bool RiverFlowsDown(TileIndex begin, TileIndex end)
Check whether a river at begin could (logically) flow down to end.
void RiverMakeWider(TileIndex tile, TileIndex origin_tile)
Widen a river by expanding into adjacent tiles via circular tile search.
uint DistanceManhattan(TileIndex t0, TileIndex t1)
Gets the Manhattan distance between the two given tiles.
TileIndexDiff TileOffsByDiagDir(DiagDirection dir)
Convert a DiagDirection to a TileIndexDiff.
uint32_t RandomRange(uint32_t limit, const std::source_location location=std::source_location::current())
Pick a random number between 0 and limit - 1, inclusive.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
uint8_t min_river_length
the minimum river length
uint8_t land_generator
the landscape generator
uint8_t river_route_random
the amount of randomicity for the route finding
GameCreationSettings game_creation
settings used during the creation of a game (map)
bool IsValidTile(Tile tile)
Checks if a tile is valid.
@ INVALID_TRACKDIR
Flag for an invalid trackdir.
void MakeRiverAndModifyDesertZoneAround(TileIndex tile)
Make a river tile and remove desert directly around it.
bool IsWaterTile(Tile t)
Is it a water tile with plain water?
Base includes/functions for YAPF.
void YapfBuildRiver(TileIndex start_tile, TileIndex end_tile, TileIndex spring_tile, bool main_river)
Builds a river from the start tile to the end tile.