summaryrefslogtreecommitdiff
path: root/src/yapf/yapf.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
committerrubidium <rubidium@openttd.org>2007-01-02 19:19:48 +0000
commit66bbf336c6af7353ef0aeed58002c46543b30635 (patch)
treead4a63860df2626b22f77e7dac712e958bea54cb /src/yapf/yapf.h
parentccc0a3f4dbf58c005b22341ac8874252924690cd (diff)
downloadopenttd-66bbf336c6af7353ef0aeed58002c46543b30635.tar.xz
(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.
Diffstat (limited to 'src/yapf/yapf.h')
-rw-r--r--src/yapf/yapf.h120
1 files changed, 120 insertions, 0 deletions
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 */