28#include "navigation_path.h"
30#define MAX_BOT_FUNCTIONS 5
34 AttractiveNodePtr m_pNode;
45 void SetControlledEntity(
Player *newEntity);
47 void MoveThink(usercmd_t& botcmd);
52 Vector vPreferredDir = vec_zero,
53 float *vLeashHome = NULL,
54 float fLeashRadius = 0.0f
56 void MoveNear(
Vector vNear,
float fRadius,
float *vLeashHome = NULL,
float fLeashRadius = 0.0f);
57 void MoveTo(
Vector vPos,
float *vLeashHome = NULL,
float fLeashRadius = 0.0f);
58 bool MoveToBestAttractivePoint(
int iMinPriority = 0);
60 bool CanMoveTo(
Vector vPos);
65 Vector GetCurrentGoal()
const;
66 Vector GetCurrentPathDirection()
const;
70 Vector CalculateRelativeWishDirection(
const Vector& dir)
const;
71 void CheckAttractiveNodes();
72 void CheckEndPos(
Entity *entity);
73 void CheckJump(usercmd_t& botcmd);
74 void CheckJumpOverEdge(usercmd_t& botcmd);
77 void CalculateBestFrontAvoidance(
88 AttractiveNodePtr m_pPrimaryAttract;
101 int m_iCheckPathTime;
102 int m_iLastBlockTime;
103 int m_iTempAwayState;
110 bool m_bAvoidCollision;
111 int m_iCollisionCheckTime;
112 Vector m_vTempCollisionAvoidance;
119 int m_iJumpCheckTime;
128 void SetControlledEntity(
Player *newEntity);
130 void TurnThink(usercmd_t& botcmd, usereyes_t& eyeinfo);
131 const Vector& GetTargetAngles()
const;
132 void SetTargetAngles(
Vector vAngles);
147 virtual bool CheckCondition()
const = 0;
148 virtual void Begin() = 0;
149 virtual void End() = 0;
150 virtual void Think() = 0;
153class BotController :
public Listener
157 bool (BotController::*CheckCondition)(void);
158 void (BotController::*BeginState)(void);
159 void (BotController::*EndState)(void);
160 void (BotController::*ThinkState)(void);
172 int m_iAttackStopAimTime;
173 int m_iLastBurstTime;
175 int m_iLastUnseenTime;
176 int m_iContinuousFireTime;
190 usereyes_t m_botEyes;
194 unsigned int m_StateFlags;
198 int m_iNextTauntTime;
208 Weapon *FindWeaponWithAmmo(
void);
209 Weapon *FindMeleeWeapon(
void);
210 void UseWeaponWithAmmo(
void);
213 bool CheckWindows(
void);
214 void CheckValidWeapon(
void);
216 void State_DefaultBegin(
void);
217 void State_DefaultEnd(
void);
218 void State_Reset(
void);
220 static void InitState_Idle(
botfunc_t *func);
221 bool CheckCondition_Idle(
void);
222 void State_BeginIdle(
void);
223 void State_EndIdle(
void);
224 void State_Idle(
void);
226 static void InitState_Curious(
botfunc_t *func);
227 bool CheckCondition_Curious(
void);
228 void State_BeginCurious(
void);
229 void State_EndCurious(
void);
230 void State_Curious(
void);
232 static void InitState_Attack(
botfunc_t *func);
233 bool CheckCondition_Attack(
void);
234 void State_BeginAttack(
void);
235 void State_EndAttack(
void);
236 void State_Attack(
void);
237 bool IsValidEnemy(
Sentient *sent)
const;
239 static void InitState_Grenade(
botfunc_t *func);
240 bool CheckCondition_Grenade(
void);
241 void State_BeginGrenade(
void);
242 void State_EndGrenade(
void);
243 void State_Grenade(
void);
245 static void InitState_Weapon(
botfunc_t *func);
246 bool CheckCondition_Weapon(
void);
247 void State_BeginWeapon(
void);
248 void State_EndWeapon(
void);
249 void State_Weapon(
void);
251 void CheckStates(
void);
254 CLASS_PROTOTYPE(BotController);
259 static void Init(
void);
261 void GetEyeInfo(usereyes_t *eyeinfo);
262 void GetUsercmd(usercmd_t *ucmd);
264 void UpdateBotStates(
void);
265 void CheckReload(
void);
267 void AimAtAimNode(
void);
269 void NoticeEvent(
Vector vPos,
int iType,
Entity *pEnt,
float fDistanceSquared,
float fRadiusSquared);
270 void ClearEnemy(
void);
272 void SendCommand(
const char *text);
278 void Killed(
const Event& ev);
279 void GotKill(
const Event& ev);
280 void EventStuffText(
const str& text);
285 void setControlledEntity(
Player *player);
286 Player *getControlledEntity()
const;
307 void ThinkControllers();
324 void BroadcastEvent(
Entity *originator,
Vector origin,
int iType,
float radius);
Definition playerbot.h:293
Definition playerbot.h:154
Definition playerbot.h:314
Definition playerbot.h:40
Definition playerbot.h:124
Definition playerbot.h:145
Definition container.h:85
Definition listener.h:246
Definition navigation_path.h:43
Definition gamescript.h:165
Definition playerbot.h:156
Definition playerbot.h:32