#include "stdafx.h"
#include "npf.h"
#include "debug.h"
#include "landscape.h"
#include "depot_base.h"
#include "depot_map.h"
#include "network/network.h"
#include "tunnelbridge_map.h"
#include "functions.h"
#include "vehicle_base.h"
#include "tunnelbridge.h"
#include "pbs.h"
#include "settings_type.h"
Go to the source code of this file.
Defines | |
#define | NPF_STRAIGHT_LENGTH (uint)(NPF_TILE_LENGTH * STRAIGHT_TRACK_LENGTH) |
Functions | |
static uint | NPFDistanceTrack (TileIndex t0, TileIndex t1) |
Calculates the minimum distance traveled to get from t0 to t1 when only using tracks (ie, only making 45 degree turns). | |
static uint | NPFHash (uint key1, uint key2) |
Calculates a hash value for use in the NPF. | |
static int32 | NPFCalcZero (AyStar *as, AyStarNode *current, OpenListNode *parent) |
static TileIndex | CalcClosestStationTile (StationID station, TileIndex tile) |
static int32 | NPFCalcStationOrTileHeuristic (AyStar *as, AyStarNode *current, OpenListNode *parent) |
static void | NPFFillTrackdirChoice (AyStarNode *current, OpenListNode *parent) |
static uint | NPFTunnelCost (AyStarNode *current) |
static uint | NPFBridgeCost (AyStarNode *current) |
static uint | NPFSlopeCost (AyStarNode *current) |
static uint | NPFReservedTrackCost (AyStarNode *current) |
static void | NPFMarkTile (TileIndex tile) |
Mark tiles by mowing the grass when npf debug level >= 1. | |
static int32 | NPFWaterPathCost (AyStar *as, AyStarNode *current, OpenListNode *parent) |
static int32 | NPFRoadPathCost (AyStar *as, AyStarNode *current, OpenListNode *parent) |
static int32 | NPFRailPathCost (AyStar *as, AyStarNode *current, OpenListNode *parent) |
static int32 | NPFFindDepot (AyStar *as, OpenListNode *current) |
static int32 | NPFFindSafeTile (AyStar *as, OpenListNode *current) |
Find any safe and free tile. | |
static int32 | NPFFindStationOrTile (AyStar *as, OpenListNode *current) |
static const PathNode * | FindSafePosition (PathNode *path, const Vehicle *v) |
Find the node containing the first signal on the path. | |
static void | ClearPathReservation (const PathNode *start, const PathNode *end) |
Lift the reservation of the tiles from start till end , excluding end itself. | |
static void | NPFSaveTargetData (AyStar *as, OpenListNode *current) |
To be called when current contains the (shortest route to) the target node. | |
static bool | CanEnterTileOwnerCheck (Owner owner, TileIndex tile, DiagDirection enterdir) |
Finds out if a given company's vehicles are allowed to enter a given tile. | |
static DiagDirection | GetDepotDirection (TileIndex tile, TransportType type) |
Returns the direction the exit of the depot on the given tile is facing. | |
static DiagDirection | GetSingleTramBit (TileIndex tile) |
Tests if a tile is a road tile with a single tramtrack (tram can reverse). | |
static DiagDirection | GetTileSingleEntry (TileIndex tile, TransportType type, uint subtype) |
Tests if a tile can be entered or left only from one side. | |
static bool | ForceReverse (TileIndex tile, DiagDirection dir, TransportType type, uint subtype) |
Tests if a vehicle must reverse on a tile. | |
static bool | CanEnterTile (TileIndex tile, DiagDirection dir, TransportType type, uint subtype, RailTypes railtypes, Owner owner) |
Tests if a vehicle can enter a tile. | |
static TrackdirBits | GetDriveableTrackdirBits (TileIndex dst_tile, Trackdir src_trackdir, TransportType type, uint subtype) |
Returns the driveable Trackdirs on a tile. | |
static void | NPFFollowTrack (AyStar *aystar, OpenListNode *current) |
static NPFFoundTargetData | NPFRouteInternal (AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, TransportType type, uint sub_type, Owner owner, RailTypes railtypes, uint reverse_penalty) |
NPFFoundTargetData | NPFRouteToStationOrTileTwoWay (TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) |
NPFFoundTargetData | NPFRouteToStationOrTile (TileIndex tile, Trackdir trackdir, bool ignore_start_tile, NPFFindStationOrTileData *target, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) |
NPFFoundTargetData | NPFRouteToDepotBreadthFirstTwoWay (TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, TransportType type, uint sub_type, Owner owner, RailTypes railtypes, uint reverse_penalty) |
NPFFoundTargetData | NPFRouteToDepotBreadthFirst (TileIndex tile, Trackdir trackdir, bool ignore_start_tile, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) |
NPFFoundTargetData | NPFRouteToDepotTrialError (TileIndex tile, Trackdir trackdir, bool ignore_start_tile, TransportType type, uint sub_type, Owner owner, RailTypes railtypes) |
NPFFoundTargetData | NPFRouteToSafeTile (const Vehicle *v, TileIndex tile, Trackdir trackdir, bool override_railtype) |
Search for any safe tile using a breadth first search and try to reserve a path. | |
void | InitializeNPF () |
void | NPFFillWithOrderData (NPFFindStationOrTileData *fstd, Vehicle *v, bool reserve_path) |
Variables | |
static AyStar | _npf_aystar |
static const uint | _trackdir_length [TRACKDIR_END] |
Definition in file npf.cpp.
static bool CanEnterTile | ( | TileIndex | tile, | |
DiagDirection | dir, | |||
TransportType | type, | |||
uint | subtype, | |||
RailTypes | railtypes, | |||
Owner | owner | |||
) | [static] |
Tests if a vehicle can enter a tile.
tile | The tile of interest. | |
dir | The direction in which the vehicle drives onto a tile. | |
type | The transporttype of the vehicle. | |
subtype | For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. | |
railtypes | For TRANSPORT_RAIL the compatible RailTypes of the vehicle. | |
owner | The owner of the vehicle. |
Definition at line 688 of file npf.cpp.
References CanEnterTileOwnerCheck(), GetTileRailType(), GetTileSingleEntry(), GetTunnelBridgeDirection(), HasBit(), INVALID_DIAGDIR, IsTileType(), MP_TUNNELBRIDGE, ReverseDiagDir(), and TRANSPORT_RAIL.
static bool CanEnterTileOwnerCheck | ( | Owner | owner, | |
TileIndex | tile, | |||
DiagDirection | enterdir | |||
) | [static] |
Finds out if a given company's vehicles are allowed to enter a given tile.
owner | The owner of the vehicle. | |
tile | The tile that is about to be entered. | |
enterdir | The direction in which the vehicle wants to enter the tile. |
Definition at line 577 of file npf.cpp.
References DiagDirToAxis(), GetTileType(), GetTunnelBridgeTransportType(), IsTileOwner(), IsTileType(), MP_RAILWAY, MP_ROAD, MP_TUNNELBRIDGE, and TRANSPORT_RAIL.
Referenced by CanEnterTile().
static const PathNode* FindSafePosition | ( | PathNode * | path, | |
const Vehicle * | v | |||
) | [static] |
Find the node containing the first signal on the path.
If the first signal is on the very first two tiles of the path, the second signal is returnd. If no suitable signal is present, the last node of the path is returned.
Definition at line 489 of file npf.cpp.
References _settings_game, PathfinderSettings::forbid_90_deg, IsSafeWaitingPosition(), and GameSettings::pf.
Referenced by NPFSaveTargetData().
static bool ForceReverse | ( | TileIndex | tile, | |
DiagDirection | dir, | |||
TransportType | type, | |||
uint | subtype | |||
) | [inline, static] |
Tests if a vehicle must reverse on a tile.
tile | The tile of interest. | |
dir | The direction in which the vehicle drives on a tile. | |
type | The transporttype of the vehicle. | |
subtype | For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. |
Definition at line 671 of file npf.cpp.
References GetTileSingleEntry(), and INVALID_DIAGDIR.
static TrackdirBits GetDriveableTrackdirBits | ( | TileIndex | dst_tile, | |
Trackdir | src_trackdir, | |||
TransportType | type, | |||
uint | subtype | |||
) | [static] |
Returns the driveable Trackdirs on a tile.
One-way-roads are taken into account. Signals are not tested.
dst_tile | The tile of interest. | |
src_trackdir | The direction the vehicle is currently moving. | |
type | The transporttype of the vehicle. | |
subtype | For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. |
Definition at line 720 of file npf.cpp.
References _settings_game, DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, PathfinderSettings::forbid_90_deg, GetSingleTramBit(), GetTileTrackStatus(), HasBit(), GameSettings::pf, ROADTYPE_TRAM, TileX(), TileY(), TRACKDIR_BIT_X_NE, TRACKDIR_BIT_X_SW, TRACKDIR_BIT_Y_NW, TRACKDIR_BIT_Y_SE, TrackdirCrossesTrackdirs(), TrackdirReachesTrackdirs(), TrackStatusToTrackdirBits(), TRANSPORT_RAIL, TRANSPORT_ROAD, and TRANSPORT_WATER.
static DiagDirection GetTileSingleEntry | ( | TileIndex | tile, | |
TransportType | type, | |||
uint | subtype | |||
) | [static] |
Tests if a tile can be entered or left only from one side.
Depots, non-drive-through roadstops, and tiles with single trambits are tested.
tile | The tile of interest. | |
type | The transporttype of the vehicle. | |
subtype | For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. |
Definition at line 650 of file npf.cpp.
References GetDepotDirection(), GetRoadStopDir(), GetSingleTramBit(), HasBit(), INVALID_DIAGDIR, IsDepotTypeTile(), ROADTYPE_TRAM, TRANSPORT_ROAD, and TRANSPORT_WATER.
Referenced by CanEnterTile(), and ForceReverse().
Calculates the minimum distance traveled to get from t0 to t1 when only using tracks (ie, only making 45 degree turns).
Returns the distance in the NPF scale, ie the number of full tiles multiplied by NPF_TILE_LENGTH to prevent rounding.
Definition at line 37 of file npf.cpp.
References Delta(), min(), STRAIGHT_TRACK_LENGTH, TileX(), and TileY().
static int32 NPFFindSafeTile | ( | AyStar * | as, | |
OpenListNode * | current | |||
) | [static] |
Find any safe and free tile.
Definition at line 453 of file npf.cpp.
References _settings_game, PathfinderSettings::forbid_90_deg, IsSafeWaitingPosition(), IsWaitingPositionFree(), and GameSettings::pf.
Referenced by NPFRouteToSafeTile().
static uint NPFHash | ( | uint | key1, | |
uint | key2 | |||
) | [static] |
Calculates a hash value for use in the NPF.
key1 | The TileIndex of the tile to hash | |
key2 | The Trackdir of the track on the tile. |
Definition at line 70 of file npf.cpp.
References IsValidTile(), IsValidTrackdir(), TileX(), TileY(), and TRACKDIR_END.
static void NPFMarkTile | ( | TileIndex | tile | ) | [static] |
Mark tiles by mowing the grass when npf debug level >= 1.
Will not work for multiplayer games, since it can (will) cause desyncs.
Definition at line 239 of file npf.cpp.
References _networking, GetTileType(), IsRailDepot(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, and RAIL_GROUND_BARREN.
static void NPFSaveTargetData | ( | AyStar * | as, | |
OpenListNode * | current | |||
) | [static] |
To be called when current
contains the (shortest route to) the target node.
Will fill the contents of the NPFFoundTargetData using AyStarNode[NPF_TRACKDIR_CHOICE]. If requested, path reservation is done here.
Definition at line 525 of file npf.cpp.
References _settings_game, ClearPathReservation(), FindSafePosition(), PathfinderSettings::forbid_90_deg, IsWaitingPositionFree(), NPF_TRACKDIR_CHOICE, NPF_TYPE, GameSettings::pf, SetRailwayStationPlatformReservation(), SetRailwayStationReservation(), TILE_ADD, TileOffsByDiagDir(), TrackdirToExitdir(), TrackdirToTrack(), TRANSPORT_RAIL, and TryReserveRailTrack().
const uint _trackdir_length[TRACKDIR_END] [static] |