123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*
- ===========================================================================
- Copyright (C) 1999-2005 Id Software, Inc.
- This file is part of Quake III Arena source code.
- Quake III Arena source code is free software; you can redistribute it
- and/or modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the License,
- or (at your option) any later version.
- Quake III Arena source code is distributed in the hope that it will be
- useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with Foobar; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- ===========================================================================
- */
- //
- /*****************************************************************************
- * name: be_ai_move.h
- *
- * desc: movement AI
- *
- * $Archive: /source/code/botlib/be_ai_move.h $
- *
- *****************************************************************************/
- //movement types
- #define MOVE_WALK 1
- #define MOVE_CROUCH 2
- #define MOVE_JUMP 4
- #define MOVE_GRAPPLE 8
- #define MOVE_ROCKETJUMP 16
- #define MOVE_BFGJUMP 32
- //move flags
- #define MFL_BARRIERJUMP 1 //bot is performing a barrier jump
- #define MFL_ONGROUND 2 //bot is in the ground
- #define MFL_SWIMMING 4 //bot is swimming
- #define MFL_AGAINSTLADDER 8 //bot is against a ladder
- #define MFL_WATERJUMP 16 //bot is waterjumping
- #define MFL_TELEPORTED 32 //bot is being teleported
- #define MFL_GRAPPLEPULL 64 //bot is being pulled by the grapple
- #define MFL_ACTIVEGRAPPLE 128 //bot is using the grapple hook
- #define MFL_GRAPPLERESET 256 //bot has reset the grapple
- #define MFL_WALK 512 //bot should walk slowly
- // move result flags
- #define MOVERESULT_MOVEMENTVIEW 1 //bot uses view for movement
- #define MOVERESULT_SWIMVIEW 2 //bot uses view for swimming
- #define MOVERESULT_WAITING 4 //bot is waiting for something
- #define MOVERESULT_MOVEMENTVIEWSET 8 //bot has set the view in movement code
- #define MOVERESULT_MOVEMENTWEAPON 16 //bot uses weapon for movement
- #define MOVERESULT_ONTOPOFOBSTACLE 32 //bot is ontop of obstacle
- #define MOVERESULT_ONTOPOF_FUNCBOB 64 //bot is ontop of a func_bobbing
- #define MOVERESULT_ONTOPOF_ELEVATOR 128 //bot is ontop of an elevator (func_plat)
- #define MOVERESULT_BLOCKEDBYAVOIDSPOT 256 //bot is blocked by an avoid spot
- //
- #define MAX_AVOIDREACH 1
- #define MAX_AVOIDSPOTS 32
- // avoid spot types
- #define AVOID_CLEAR 0 //clear all avoid spots
- #define AVOID_ALWAYS 1 //avoid always
- #define AVOID_DONTBLOCK 2 //never totally block
- // restult types
- #define RESULTTYPE_ELEVATORUP 1 //elevator is up
- #define RESULTTYPE_WAITFORFUNCBOBBING 2 //waiting for func bobbing to arrive
- #define RESULTTYPE_BADGRAPPLEPATH 4 //grapple path is obstructed
- #define RESULTTYPE_INSOLIDAREA 8 //stuck in solid area, this is bad
- //structure used to initialize the movement state
- //the or_moveflags MFL_ONGROUND, MFL_TELEPORTED and MFL_WATERJUMP come from the playerstate
- typedef struct bot_initmove_s
- {
- vec3_t origin; //origin of the bot
- vec3_t velocity; //velocity of the bot
- vec3_t viewoffset; //view offset
- int entitynum; //entity number of the bot
- int client; //client number of the bot
- float thinktime; //time the bot thinks
- int presencetype; //presencetype of the bot
- vec3_t viewangles; //view angles of the bot
- int or_moveflags; //values ored to the movement flags
- } bot_initmove_t;
- //NOTE: the ideal_viewangles are only valid if MFL_MOVEMENTVIEW is set
- typedef struct bot_moveresult_s
- {
- int failure; //true if movement failed all together
- int type; //failure or blocked type
- int blocked; //true if blocked by an entity
- int blockentity; //entity blocking the bot
- int traveltype; //last executed travel type
- int flags; //result flags
- int weapon; //weapon used for movement
- vec3_t movedir; //movement direction
- vec3_t ideal_viewangles; //ideal viewangles for the movement
- } bot_moveresult_t;
- // bk001204: from code/botlib/be_ai_move.c
- // TTimo 04/12/2001 was moved here to avoid dup defines
- typedef struct bot_avoidspot_s
- {
- vec3_t origin;
- float radius;
- int type;
- } bot_avoidspot_t;
- //resets the whole move state
- void BotResetMoveState(int movestate);
- //moves the bot to the given goal
- void BotMoveToGoal(bot_moveresult_t *result, int movestate, bot_goal_t *goal, int travelflags);
- //moves the bot in the specified direction using the specified type of movement
- int BotMoveInDirection(int movestate, vec3_t dir, float speed, int type);
- //reset avoid reachability
- void BotResetAvoidReach(int movestate);
- //resets the last avoid reachability
- void BotResetLastAvoidReach(int movestate);
- //returns a reachability area if the origin is in one
- int BotReachabilityArea(vec3_t origin, int client);
- //view target based on movement
- int BotMovementViewTarget(int movestate, bot_goal_t *goal, int travelflags, float lookahead, vec3_t target);
- //predict the position of a player based on movement towards a goal
- int BotPredictVisiblePosition(vec3_t origin, int areanum, bot_goal_t *goal, int travelflags, vec3_t target);
- //returns the handle of a newly allocated movestate
- int BotAllocMoveState(void);
- //frees the movestate with the given handle
- void BotFreeMoveState(int handle);
- //initialize movement state before performing any movement
- void BotInitMoveState(int handle, bot_initmove_t *initmove);
- //add a spot to avoid (if type == AVOID_CLEAR all spots are removed)
- void BotAddAvoidSpot(int movestate, vec3_t origin, float radius, int type);
- //must be called every map change
- void BotSetBrushModelTypes(void);
- //setup movement AI
- int BotSetupMoveAI(void);
- //shutdown movement AI
- void BotShutdownMoveAI(void);
|