2015-06-30 12:46:07 +03:00
/*
*
* This program 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 .
*
* This program 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 this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
* In addition , as a special exception , the author gives permission to
* link the code of this program with the Half - Life Game Engine ( " HL
* Engine " ) and Modified Game Libraries ( " MODs " ) developed by Valve,
* L . L . C ( " Valve " ) . You must obey the GNU General Public License in all
* respects for all of the code used other than the HL Engine and MODs
* from Valve . If you modify this file , you may extend this exception
* to your version of the file , but you are not obligated to do so . If
* you do not wish to do so , delete this exception statement from your
* version .
*
2015-12-09 01:39:54 +03:00
*/
2015-06-30 12:46:07 +03:00
# pragma once
2015-12-09 01:39:54 +03:00
// STL uses exceptions, but we are not compiling with them - ignore warning
# pragma warning(disable : 4530)
2015-09-16 23:19:21 +03:00
2015-12-09 01:39:54 +03:00
# include <list>
class CNavArea ;
class CGrenade ;
class ActiveGrenade
{
public :
ActiveGrenade ( int weaponID , CGrenade * grenadeEntity ) ;
2016-02-04 03:18:26 +03:00
void OnEntityGone ( ) ;
bool IsValid ( ) const ;
2016-02-23 02:13:52 +03:00
bool IsEntity ( CGrenade * grenade ) const { return ( grenade = = m_entity ) ? true : false ; }
int GetID ( ) const { return m_id ; }
const Vector * GetDetonationPosition ( ) const { return & m_detonationPosition ; }
2016-02-04 03:18:26 +03:00
const Vector * GetPosition ( ) const ;
2015-12-09 01:39:54 +03:00
private :
int m_id ;
CGrenade * m_entity ;
Vector m_detonationPosition ;
float m_dieTimestamp ;
2016-02-04 03:18:26 +03:00
} ;
2015-12-09 01:39:54 +03:00
2017-10-19 20:12:02 +03:00
typedef std : : list < ActiveGrenade * > ActiveGrenadeList ;
2015-12-09 01:39:54 +03:00
class CBotManager
{
public :
2016-02-04 03:18:26 +03:00
CBotManager ( ) ;
2016-10-05 18:27:50 +03:00
virtual ~ CBotManager ( ) { }
2015-12-09 01:39:54 +03:00
virtual void ClientDisconnect ( CBasePlayer * pPlayer ) = 0 ;
virtual BOOL ClientCommand ( CBasePlayer * pPlayer , const char * pcmd ) = 0 ;
2016-02-04 03:18:26 +03:00
virtual void ServerActivate ( ) = 0 ;
virtual void ServerDeactivate ( ) = 0 ;
2015-12-09 01:39:54 +03:00
virtual void ServerCommand ( const char * pcmd ) = 0 ;
virtual void AddServerCommand ( const char * cmd ) = 0 ;
2016-02-04 03:18:26 +03:00
virtual void AddServerCommands ( ) = 0 ;
2015-12-09 01:39:54 +03:00
2016-02-04 03:18:26 +03:00
virtual void RestartRound ( ) ;
virtual void StartFrame ( ) ;
2015-12-09 01:39:54 +03:00
// Events are propogated to all bots.
2017-10-12 17:50:56 +03:00
virtual void OnEvent ( GameEventType event , CBaseEntity * entity = nullptr , CBaseEntity * other = nullptr ) ; // Invoked when event occurs in the game (some events have NULL entity).
2017-07-01 23:40:10 +03:00
virtual unsigned int GetPlayerPriority ( CBasePlayer * player ) const = 0 ; // return priority of player (0 = max pri)
2015-12-09 01:39:54 +03:00
2016-02-04 03:18:26 +03:00
public :
const char * GetNavMapFilename ( ) const ; // return the filename for this map's "nav" file
2015-12-09 01:39:54 +03:00
2017-07-01 23:40:10 +03:00
void AddGrenade ( int type , CGrenade * grenade ) ; // add an active grenade to the bot's awareness
2016-02-04 03:18:26 +03:00
void RemoveGrenade ( CGrenade * grenade ) ; // the grenade entity in the world is going away
2017-07-01 23:40:10 +03:00
void ValidateActiveGrenades ( ) ; // destroy any invalid active grenades
2016-02-04 03:18:26 +03:00
void DestroyAllGrenades ( ) ;
2015-12-09 01:39:54 +03:00
2017-07-01 23:40:10 +03:00
bool IsLineBlockedBySmoke ( const Vector * from , const Vector * to ) ; // return true if line intersects smoke volume
2016-02-04 03:18:26 +03:00
bool IsInsideSmokeCloud ( const Vector * pos ) ; // return true if position is inside a smoke cloud
2015-12-09 01:39:54 +03:00
private :
// the list of active grenades the bots are aware of
ActiveGrenadeList m_activeGrenadeList ;
2016-02-04 03:18:26 +03:00
} ;
2015-12-09 01:39:54 +03:00
2015-12-22 21:07:49 +03:00
GameEventType NameToGameEvent ( const char * name ) ;