1 #ifndef __AIDEFINE__H
2 #define __AIDEFINE__H
3
4 #include <math.h>
5 #include "../Common/Path.h"
6
7 #define MATH_SQRT2 1.4142135623731f
8 enum EFindType
9 {
10 EFIND_TYPE4 = 4,//must be 4
11 EFIND_TYPE8 = 8//must be 8
12 };
13 extern PointI AI_FindHelpPoint[8];
14 typedef float (*AI_DitanceFun)(int,int,int,int);
15 typedef bool (*AI_VisitFun)(int,int);
16 inline int AI_ABS(int data){return data >= 0?data:-data;}
17 inline float AI_ABS(float data){return data >= 0?data:-data;}
18 inline float AI_Ditance1(int x1, int y1, int x2, int y2)
19 {
20 if(x1 == x2 || y1 == y2){return 1;}
21 return MATH_SQRT2;
22 }
23 inline float AI_Ditance2(int x1, int y1, int x2, int y2)
24 {
25 return (float)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
26 }
27 inline bool AI_CheckVisit(int x,int y,const PointI &size,bool(*visit)(int,int))
28 {
29 if(x < 0 || y < 0 || x >= size.x || y >= size.y){return false;}
30 return visit(x,y);
31 }
32 inline bool AI_CheckPass(int x1,int y1,int x2,int y2,AI_VisitFun visit)
33 {
34 if(0 != (x1 - x2) * (y1 - y2))
35 {
36 return visit(x2, y2) && (visit(x2, y1) && visit(x1, y2));
37 }
38 return visit(x2, y2);
39 }
40 inline bool AI_CheckPass(const PointI &p1, const PointI &p2, AI_VisitFun visit)
41 {
42 return AI_CheckPass(p1.x, p1.y, p2.x, p2.y, visit);
43 }
44 inline bool AI_CheckRange(const PointI &p, const PointI &size)
45 {
46 return !(p.x < 0 || p.y < 0 || p.x >= size.x || p.y >= size.y);
47 }
48
49 #endif