From 66bbf336c6af7353ef0aeed58002c46543b30635 Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 2 Jan 2007 19:19:48 +0000 Subject: (svn r7759) -Merge: makefile rewrite. This merge features: - A proper ./configure, so everything needs to be configured only once, not for every make. - Usage of makedepend when available. This greatly reduces the time needed for generating the dependencies. - A generator for all project files. There is a single file with sources, which is used to generate Makefiles and the project files for MSVC. - Proper support for OSX universal binaries. - Object files for non-MSVC compiles are also placed in separate directories, making is faster to switch between debug and release compiles and it does not touch the directory with the source files. - Functionality to make a bundle of all needed files for for example a nightly or distribution of a binary with all needed GRFs and language files. Note: as this merge moves almost all files, it is recommended to make a backup of your working copy before updating your working copy. --- src/yapf/yapf.h | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/yapf/yapf.h (limited to 'src/yapf/yapf.h') diff --git a/src/yapf/yapf.h b/src/yapf/yapf.h new file mode 100644 index 000000000..6b58b4e08 --- /dev/null +++ b/src/yapf/yapf.h @@ -0,0 +1,120 @@ +/* $Id$ */ + +#ifndef YAPF_H +#define YAPF_H + +#include "../debug.h" + +/** Finds the best path for given ship. + * @param v the ship that needs to find a path + * @param tile the tile to find the path from (should be next tile the ship is about to enter) + * @param enterdir diagonal direction which the ship will enter this new tile from + * @param tracks available tracks on the new tile (to choose from) + * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found + */ +Trackdir YapfChooseShipTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks); + +/** Finds the best path for given road vehicle. + * @param v the RV that needs to find a path + * @param tile the tile to find the path from (should be next tile the RV is about to enter) + * @param enterdir diagonal direction which the RV will enter this new tile from + * @param tracks available tracks on the new tile (to choose from) + * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found + */ +Trackdir YapfChooseRoadTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir); + +/** Finds the best path for given train. + * @param v the train that needs to find a path + * @param tile the tile to find the path from (should be next tile the train is about to enter) + * @param enterdir diagonal direction which the RV will enter this new tile from + * @param trackdirs available trackdirs on the new tile (to choose from) + * @param no_path_found [out] true is returned if no path can be found (returned Trackdir is only a 'guess') + * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found + */ +Trackdir YapfChooseRailTrack(Vehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool *path_not_found); + +/** Used by RV multistop feature to find the nearest road stop that has a free slot. + * @param v RV (its current tile will be the origin) + * @param tile destination tile + * @return distance from origin tile to the destination (number of road tiles) or UINT_MAX if path not found + */ +uint YapfRoadVehDistanceToTile(const Vehicle* v, TileIndex tile); + +/** Used when user sends RV to the nearest depot or if RV needs servicing. + * Returns the nearest depot (or NULL if depot was not found). + */ +Depot* YapfFindNearestRoadDepot(const Vehicle *v); + +/** Used when user sends train to the nearest depot or if train needs servicing. + * @v train that needs to go to some depot + * @max_distance max distance (number of track tiles) from the current train position + * (used also as optimization - the pathfinder can stop path finding if max_distance + * was reached and no depot was seen) + * @reverse_penalty penalty that should be added for the path that requires reversing the train first + * @depot_tile receives the depot tile if depot was found + * @reversed receives true if train needs to reversed first + * @return the true if depot was found. + */ +bool YapfFindNearestRailDepotTwoWay(Vehicle *v, int max_distance, int reverse_penalty, TileIndex* depot_tile, bool* reversed); + +/** Returns true if it is better to reverse the train before leaving station */ +bool YapfCheckReverseTrain(Vehicle* v); + +/** Use this function to notify YAPF that track layout (or signal configuration) has change */ +void YapfNotifyTrackLayoutChange(TileIndex tile, Track track); + +/** performance measurement helpers */ +void* NpfBeginInterval(void); +int NpfEndInterval(void* perf); + + +extern int _aystar_stats_open_size; +extern int _aystar_stats_closed_size; + + +/** Track followers. They should help whenever any new code will need to walk through + * tracks, road or water tiles (pathfinders, signal controllers, vehicle controllers). + * It is an attempt to introduce API that should simplify tasks listed above. + * If you will need to use it: + * 1. allocate/declare FollowTrack_t structure; + * 2. call FollowTrackInit() and provide vehicle (if relevant) + * 3. call one of 6 FollowTrackXxxx() APIs below + * 4. check return value (if true then continue else stop) + * 5. look at FollowTrack_t structure for the result + * 6. optionally repeat steps 3..5 + * 7. in case of troubles contact KUDr + */ + +/** Base struct for track followers. */ +typedef struct FollowTrack_t +{ + const Vehicle* m_veh; ///< moving vehicle + TileIndex m_old_tile; ///< the origin (vehicle moved from) before move + Trackdir m_old_td; ///< the trackdir (the vehicle was on) before move + TileIndex m_new_tile; ///< the new tile (the vehicle has entered) + TrackdirBits m_new_td_bits; ///< the new set of available trackdirs + DiagDirection m_exitdir; ///< exit direction (leaving the old tile) + bool m_is_tunnel; ///< last turn passed tunnel + bool m_is_bridge; ///< last turn passed bridge ramp + bool m_is_station; ///< last turn passed station + int m_tiles_skipped; ///< number of skipped tunnel or station tiles +} FollowTrack_t; + +/** Initializes FollowTrack_t structure */ +void FollowTrackInit(FollowTrack_t *This, const Vehicle* v); + +/** Main track follower routines */ +bool FollowTrackWater (FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); +bool FollowTrackRoad (FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); +bool FollowTrackRail (FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); +bool FollowTrackWaterNo90(FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); +bool FollowTrackRoadNo90 (FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); +bool FollowTrackRailNo90 (FollowTrack_t *This, TileIndex old_tile, Trackdir old_td); + +/** Base tile length units */ +enum { + YAPF_TILE_LENGTH = 100, + YAPF_TILE_CORNER_LENGTH = 71 +}; + +#endif /* YAPF_H */ -- cgit v1.2.3-54-g00ecf