-
Notifications
You must be signed in to change notification settings - Fork 2
/
waypoint.h
114 lines (90 loc) · 4.49 KB
/
waypoint.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//
// HPB_bot - botman's High Ping Bastard bot
//
// (http://planethalflife.com/botman/)
//
// waypoint.h
//
#ifndef WAYPOINT_H
#define WAYPOINT_H
#include <limits.h>
#define MAX_WAYPOINTS 1024
#define REACHABLE_RANGE 400.0
// defines for waypoint flags field (32 bits are available)
#define W_FL_TEAM ((1<<0) + (1<<1)) /* allow for 4 teams (0-3) */
#define W_FL_TEAM_SPECIFIC (1<<2) /* waypoint only for specified team */
#define W_FL_CROUCH (1<<3) /* must crouch to reach this waypoint */
#define W_FL_LADDER (1<<4) /* waypoint on a ladder */
#define W_FL_LIFT (1<<5) /* wait for lift to be down before approaching this waypoint */
#define W_FL_DOOR (1<<6) /* wait for door to open */
#define W_FL_HEALTH (1<<7) /* health kit (or wall mounted) location */
#define W_FL_ARMOR (1<<8) /* armor (or HEV) location */
#define W_FL_AMMO (1<<9) /* ammo location */
#define W_FL_SNIPER (1<<10) /* sniper waypoint (a good sniper spot) */
#define W_FL_FLAG (1<<11) /* flag position (or hostage or president) */
#define W_FL_FLF_CAP (1<<11) /* Front Line Force capture point */
#define W_FL_FLAG_GOAL (1<<12) /* flag return position (or rescue zone) */
#define W_FL_FLF_DEFEND (1<<12) /* Front Line Force defend point */
#define W_FL_PRONE (1<<13) /* go prone (laying down) */
#define W_FL_AIMING (1<<14) /* aiming waypoint */
#define W_FL_SENTRYGUN (1<<15) /* sentry gun waypoint for TFC */
#define W_FL_DISPENSER (1<<16) /* dispenser waypoint for TFC */
#define W_FL_WEAPON (1<<17) /* weapon_ entity location */
#define W_FL_JUMP (1<<18) /* jump waypoint */
#define W_FL_DELETED (1<<31) /* used by waypoint allocation code */
#define WAYPOINT_VERSION 4
// define the waypoint file header structure...
typedef struct {
char filetype[8]; // should be "HPB_bot\0"
int waypoint_file_version;
int waypoint_file_flags; // not currently used
int number_of_waypoints;
char mapname[32]; // name of map for these waypoints
} WAYPOINT_HDR;
// define the structure for waypoints...
typedef struct {
int flags; // button, lift, flag, health, ammo, etc.
Vector origin; // location
} WAYPOINT;
#define WAYPOINT_UNREACHABLE USHRT_MAX
#define WAYPOINT_MAX_DISTANCE (USHRT_MAX-1)
#define MAX_PATH_INDEX 4
// define the structure for waypoint paths (paths are connections between
// two waypoint nodes that indicates the bot can get from point A to point B.
// note that paths DON'T have to be two-way. sometimes they are just one-way
// connections between two points. There is an array called "paths" that
// contains head pointers to these structures for each waypoint index.
typedef struct path {
short int index[MAX_PATH_INDEX]; // indexes of waypoints (index -1 means not used)
struct path *next; // link to next structure
} PATH;
// waypoint function prototypes...
void WaypointInit(void);
int WaypointFindPath(PATH **pPath, int *path_index, int waypoint_index, int team);
int WaypointFindNearest(edict_t *pEntity, float distance, int team);
int WaypointFindNearest(Vector v_src, edict_t *pEntity, float range, int team);
int WaypointFindNearestGoal(edict_t *pEntity, int src, int team, int flags);
int WaypointFindNearestGoal(edict_t *pEntity, int src, int team, int flags, int exclude[]);
int WaypointFindNearestGoal(Vector v_src, edict_t *pEntity, float range, int team, int flags);
int WaypointFindRandomGoal(edict_t *pEntity, int team, int flags);
int WaypointFindRandomGoal(edict_t *pEntity, int team, int flags, int exclude[]);
int WaypointFindRandomGoal(Vector v_src, edict_t *pEntity, float range, int team, int flags);
int WaypointFindNearestAiming(Vector v_origin);
void WaypointSearchItems(edict_t *pEntity, Vector origin, int wpt_index);
void WaypointAdd(edict_t *pEntity);
void WaypointAddAiming(edict_t *pEntity);
void WaypointDelete(edict_t *pEntity);
void WaypointUpdate(edict_t *pEntity);
void WaypointCreatePath(edict_t *pEntity, int cmd);
void WaypointRemovePath(edict_t *pEntity, int cmd);
bool WaypointLoad(edict_t *pEntity);
void WaypointSave(void);
bool WaypointReachable(Vector v_srv, Vector v_dest, edict_t *pEntity);
int WaypointFindReachable(edict_t *pEntity, float range, int team);
void WaypointPrintInfo(edict_t *pEntity);
void WaypointThink(edict_t *pEntity);
void WaypointFloyds(short *shortest_path, short *from_to);
void WaypointRouteInit(void);
unsigned short WaypointRouteFromTo(int src, int dest, int team);
int WaypointDistanceFromTo(int src, int dest, int team);
#endif // WAYPOINT_H