source-sdk-2013-mapbase/sp/src/game/server/basemultiplayerplayer.h
Joe Ludwig beaae8ac45 Updated the SDK with the latest code from the TF and HL2 branches
* Adds support for Visual Studio 2012 and 2013
* VR Mode:
. Switches from headtrack.dll to sourcevr.dll
. Improved readability of the UI in VR
. Removed the IPD calibration tool. TF2 will now obey the Oculus
configuration file. Use the Oculus calibration tool in your SDK or
install and run "OpenVR" under Tools in Steam to calibrate your IPD.
. Added dropdown to enable VR mode in the Video options. Removed the -vr
command line option.
. Added the ability to switch in and out of VR mode without quitting the
game
. By default VR mode will run full screen. To switch back to a
borderless window set the vr_force_windowed convar.
. Added support for VR mode on Linux
* Many assorted bug fixes and other changes from Team Fortress in
various shared files
2013-12-03 08:54:16 -08:00

128 lines
4.1 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=============================================================================
#ifndef BASEMULTIPLAYERPLAYER_H
#define BASEMULTIPLAYERPLAYER_H
#pragma once
#include "player.h"
#include "ai_speech.h"
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class CBaseMultiplayerPlayer : public CAI_ExpresserHost<CBasePlayer>
{
DECLARE_CLASS( CBaseMultiplayerPlayer, CAI_ExpresserHost<CBasePlayer> );
public:
CBaseMultiplayerPlayer();
~CBaseMultiplayerPlayer();
virtual void Spawn( void );
virtual void PostConstructor( const char *szClassname );
virtual void ModifyOrAppendCriteria( AI_CriteriaSet& criteriaSet );
virtual bool SpeakIfAllowed( AIConcept_t concept, const char *modifiers = NULL, char *pszOutResponseChosen = NULL, size_t bufsize = 0, IRecipientFilter *filter = NULL );
virtual IResponseSystem *GetResponseSystem();
AI_Response *SpeakConcept( int iConcept );
virtual bool SpeakConceptIfAllowed( int iConcept, const char *modifiers = NULL, char *pszOutResponseChosen = NULL, size_t bufsize = 0, IRecipientFilter *filter = NULL );
virtual bool CanHearAndReadChatFrom( CBasePlayer *pPlayer );
virtual bool CanSpeak( void ) { return true; }
virtual bool CanBeAutobalanced() { return true; }
virtual void Precache( void )
{
PrecacheParticleSystem( "achieved" );
BaseClass::Precache();
}
virtual bool ClientCommand( const CCommand &args );
virtual bool CanSpeakVoiceCommand( void ) { return true; }
virtual bool ShouldShowVoiceSubtitleToEnemy( void );
virtual void NoteSpokeVoiceCommand( const char *pszScenePlayed ) {}
virtual void OnAchievementEarned( int iAchievement ) {}
enum
{
CHAT_IGNORE_NONE = 0,
CHAT_IGNORE_ALL,
CHAT_IGNORE_TEAM,
};
int m_iIgnoreGlobalChat;
//---------------------------------
// Speech support
virtual CAI_Expresser *GetExpresser() { return m_pExpresser; }
virtual CMultiplayer_Expresser *GetMultiplayerExpresser() { return m_pExpresser; }
void SetLastForcedChangeTeamTimeToNow( void ) { m_flLastForcedChangeTeamTime = gpGlobals->curtime; }
float GetLastForcedChangeTeamTime( void ) { return m_flLastForcedChangeTeamTime; }
void SetTeamBalanceScore( int iScore ) { m_iBalanceScore = iScore; }
int GetTeamBalanceScore( void ) { return m_iBalanceScore; }
virtual int CalculateTeamBalanceScore( void );
void AwardAchievement( int iAchievement, int iCount = 1 );
int GetPerLifeCounterKV( const char *name );
void SetPerLifeCounterKV( const char *name, int value );
void ResetPerLifeCounters( void );
KeyValues *GetPerLifeCounterKeys( void ) { return m_pAchievementKV; }
void EscortScoringThink( void );
void StartScoringEscortPoints( float flRate );
void StopScoringEscortPoints( void );
float m_flAreaCaptureScoreAccumulator;
float m_flCapPointScoreRate;
float GetConnectionTime( void ) { return m_flConnectionTime; }
// Command rate limiting.
bool ShouldRunRateLimitedCommand( const CCommand &args );
bool ShouldRunRateLimitedCommand( const char *pszCommand );
protected:
virtual CAI_Expresser *CreateExpresser( void );
int m_iCurrentConcept;
private:
//---------------------------------
CMultiplayer_Expresser *m_pExpresser;
float m_flConnectionTime;
float m_flLastForcedChangeTeamTime;
int m_iBalanceScore; // a score used to determine which players are switched to balance the teams
KeyValues *m_pAchievementKV;
// This lets us rate limit the commands the players can execute so they don't overflow things like reliable buffers.
CUtlDict<float,int> m_RateLimitLastCommandTimes;
};
//-----------------------------------------------------------------------------
// Inline methods
//-----------------------------------------------------------------------------
inline CBaseMultiplayerPlayer *ToBaseMultiplayerPlayer( CBaseEntity *pEntity )
{
if ( !pEntity || !pEntity->IsPlayer() )
return NULL;
#if _DEBUG
return dynamic_cast<CBaseMultiplayerPlayer *>( pEntity );
#else
return static_cast<CBaseMultiplayerPlayer *>( pEntity );
#endif
}
#endif // BASEMULTIPLAYERPLAYER_H