diff options
Diffstat (limited to 'game/server/NextBot/NextBot.h')
| -rw-r--r-- | game/server/NextBot/NextBot.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/game/server/NextBot/NextBot.h b/game/server/NextBot/NextBot.h new file mode 100644 index 0000000..ae89cab --- /dev/null +++ b/game/server/NextBot/NextBot.h @@ -0,0 +1,104 @@ +// NextBotCombatCharacter.h +// Next generation bot system +// Author: Michael Booth, April 2005 +//========= Copyright Valve Corporation, All rights reserved. ============// + +#ifndef _NEXT_BOT_H_ +#define _NEXT_BOT_H_ + +#include "NextBotInterface.h" +#include "NextBotManager.h" + +#ifdef TERROR +#include "player_lagcompensation.h" +#endif + +class NextBotCombatCharacter; +struct animevent_t; + +extern ConVar NextBotStop; + + +//---------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------- +/** + * A Next Bot derived from CBaseCombatCharacter + */ +class NextBotCombatCharacter : public CBaseCombatCharacter, public INextBot +{ +public: + DECLARE_CLASS( NextBotCombatCharacter, CBaseCombatCharacter ); + DECLARE_SERVERCLASS(); + DECLARE_DATADESC(); + + NextBotCombatCharacter( void ); + virtual ~NextBotCombatCharacter() { } + + virtual void Spawn( void ); + + virtual Vector EyePosition( void ); + + virtual INextBot *MyNextBotPointer( void ) { return this; } + + // Event hooks into NextBot system --------------------------------------- + virtual int OnTakeDamage_Alive( const CTakeDamageInfo &info ); + virtual int OnTakeDamage_Dying( const CTakeDamageInfo &info ); + virtual void Event_Killed( const CTakeDamageInfo &info ); + virtual void HandleAnimEvent( animevent_t *event ); + virtual void OnNavAreaChanged( CNavArea *enteredArea, CNavArea *leftArea ); // invoked (by UpdateLastKnownArea) when we enter a new nav area (or it is reset to NULL) + virtual void Touch( CBaseEntity *other ); + virtual void SetModel( const char *szModelName ); + virtual void Ignite( float flFlameLifetime, bool bNPCOnly = true, float flSize = 0.0f, bool bCalledByLevelDesigner = false ); + virtual void Ignite( float flFlameLifetime, CBaseEntity *pAttacker ); + //------------------------------------------------------------------------ + + virtual bool IsUseableEntity( CBaseEntity *entity, unsigned int requiredCaps = 0 ); + void UseEntity( CBaseEntity *entity, USE_TYPE useType = USE_TOGGLE ); + + // Implement this if you use MOVETYPE_CUSTOM + virtual void PerformCustomPhysics( Vector *pNewPosition, Vector *pNewVelocity, QAngle *pNewAngles, QAngle *pNewAngVelocity ); + + virtual bool BecomeRagdoll( const CTakeDamageInfo &info, const Vector &forceVector ); + + // hook to INextBot update + void DoThink( void ); + + // expose to public + int GetLastHitGroup( void ) const; // where on our body were we injured last + + virtual bool IsAreaTraversable( const CNavArea *area ) const; // return true if we can use the given area + + virtual CBaseCombatCharacter *GetLastAttacker( void ) const; // return the character who last attacked me + + // begin INextBot public interface ---------------------------------------------------------------- + virtual NextBotCombatCharacter *GetEntity( void ) const { return const_cast< NextBotCombatCharacter * >( this ); } + virtual NextBotCombatCharacter *GetNextBotCombatCharacter( void ) const { return const_cast< NextBotCombatCharacter * >( this ); } + + +private: + EHANDLE m_lastAttacker; + + bool m_didModelChange; +}; + + +inline CBaseCombatCharacter *NextBotCombatCharacter::GetLastAttacker( void ) const +{ + return ( m_lastAttacker.Get() == NULL ) ? NULL : m_lastAttacker->MyCombatCharacterPointer(); +} + +inline int NextBotCombatCharacter::GetLastHitGroup( void ) const +{ + return LastHitGroup(); +} + +//----------------------------------------------------------------------------------------------------- +class NextBotDestroyer +{ +public: + NextBotDestroyer( int team ); + bool operator() ( INextBot *bot ); + int m_team; // the team to delete bots from, or TEAM_ANY for any team +}; + +#endif // _NEXT_BOT_H_ |