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;
69 Vector CalculateDir(
const Vector& delta)
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);
76 Vector FixDeltaFromCollision(
const Vector& delta);
77 void CalculateBestFrontAvoidance(
78 const Vector& targetOrg,
80 const Vector& forward,
87 SafePtr<Player> controlledEntity;
88 AttractiveNodePtr m_pPrimaryAttract;
93 Vector m_vCurrentOrigin;
95 Vector m_vCurrentGoal;
97 Vector m_vLastCheckPos[2];
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;
120 Vector m_vJumpLocation;
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;
180 Vector m_vLastCuriousPos;
181 Vector m_vNewCuriousPos;
182 Vector m_vOldEnemyPos;
183 Vector m_vLastEnemyPos;
184 Vector m_vLastDeathPos;
185 SafePtr<Sentient> m_pEnemy;
190 usereyes_t m_botEyes;
194 unsigned int m_StateFlags;
198 int m_iNextTauntTime;
202 DelegateHandle delegateHandle_gotKill;
203 DelegateHandle delegateHandle_killed;
204 DelegateHandle delegateHandle_stufftext;
205 DelegateHandle delegateHandle_spawned;
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;
289 SafePtr<Player> controlledEnt;