00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __PATHFINDER_H__
00029 #define __PATHFINDER_H__
00030
00032
00033 #ifdef _MSC_VER
00034 #define STDCALL __stdcall
00035 #else
00036 #define STDCALL
00037 #endif
00038
00039 #if defined(DEBUG_ASTAR)
00040 #define AstarDebugPrint(x) DebugPrint(x)
00041 #else
00042 #define AstarDebugPrint(x)
00043 #endif
00044
00045
00046
00047
00048
00049 class CUnit;
00050
00058 enum _move_return_ {
00059 PF_FAILED = -3,
00060 PF_UNREACHABLE = -2,
00061 PF_REACHED = -1,
00062 PF_WAIT = 0,
00063 PF_MOVE = 1,
00064 };
00065
00069 #define NewResetPath(unit) \
00070 do { unit->Data.Move.Fast = 1; unit->Data.Move.Length = 0; } while (0)
00071
00072
00073
00074
00075
00077 extern int AStarFixedUnitCrossingCost;
00079 extern int AStarMovingUnitCrossingCost;
00081 extern bool AStarKnowUnseenTerrain;
00083 extern int AStarUnknownTerrainCost;
00084
00085
00086
00087
00088 extern const int Heading2X[9];
00089 extern const int Heading2Y[9];
00090 extern const int XY2Heading[3][3];
00091
00092
00093
00094
00095
00097 extern void InitPathfinder();
00099 extern void FreePathfinder();
00100
00102 extern unsigned char *CreateMatrix(void);
00104 extern unsigned char *MakeMatrix(void);
00106 extern int NewPath(CUnit *unit);
00108 extern int NextPathElement(CUnit *unit, int *xdp, int *ydp);
00110 extern int UnitReachable(const CUnit *unit, const CUnit *dst, int range);
00112 extern int PlaceReachable(const CUnit *src, int x, int y, int w, int h,
00113 int minrange, int maxrange);
00114
00115
00116
00117
00119 extern void InitAStar(int mapWidth, int mapHeight, int (STDCALL *costMoveTo)(int x, int y, void *data));
00120
00122 extern void FreeAStar(void);
00123
00125 extern int AStarFindPath(int sx, int sy, int gx, int gy, int gw, int gh,
00126 int tilesizex, int tilesizey, int minrange, int maxrange, char *path, int pathlen, void *data);
00127
00128 extern void SetAStarFixedUnitCrossingCost(int cost);
00129 extern int GetAStarFixedUnitCrossingCost();
00130
00131 extern void SetAStarMovingUnitCrossingCost(int cost);
00132 extern int GetAStarMovingUnitCrossingCost();
00133
00134 extern void SetAStarUnknownTerrainCost(int cost);
00135 extern int GetAStarUnknownTerrainCost();
00136
00138
00139 #endif // !__PATHFINDER_H__