mirror of
https://github.com/unknownworlds/NS.git
synced 2024-12-22 18:31:11 +00:00
105 lines
4.1 KiB
C
105 lines
4.1 KiB
C
|
//
|
||
|
// 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_TFC_FLAG (1<<11) /* flag position (or hostage or president) */
|
||
|
#define W_FL_FLF_CAP (1<<11) /* Front Line Force capture point */
|
||
|
|
||
|
#define W_FL_TFC_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_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(Vector v_src, edict_t *pEntity, float range, int team, int flags);
|
||
|
int WaypointFindRandomGoal(edict_t *pEntity, int team, int flags);
|
||
|
int WaypointFindRandomGoal(Vector v_src, edict_t *pEntity, float range, int team, int flags);
|
||
|
int WaypointFindNearestAiming(Vector v_origin);
|
||
|
void WaypointAdd(edict_t *pEntity);
|
||
|
void WaypointAddAiming(edict_t *pEntity);
|
||
|
void WaypointDelete(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
|