source-sdk-2013-mapbase/mp/src/game/shared/teamplay_gamerules.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

127 lines
4.4 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $Workfile: $
// $Date: $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//
#ifndef TEAMPLAY_GAMERULES_H
#define TEAMPLAY_GAMERULES_H
#pragma once
#include "gamerules.h"
#include "multiplay_gamerules.h"
#ifdef CLIENT_DLL
#define CTeamplayRules C_TeamplayRules
#else
#include "takedamageinfo.h"
#endif
//
// teamplay_gamerules.h
//
#define MAX_TEAMNAME_LENGTH 16
#define MAX_TEAMS 32
#define TEAMPLAY_TEAMLISTLENGTH MAX_TEAMS*MAX_TEAMNAME_LENGTH
class CTeamplayRules : public CMultiplayRules
{
public:
DECLARE_CLASS( CTeamplayRules, CMultiplayRules );
// Return the value of this player towards capturing a point
virtual int GetCaptureValueForPlayer( CBasePlayer *pPlayer ) { return 1; }
virtual bool TeamMayCapturePoint( int iTeam, int iPointIndex ) { return true; }
virtual bool PlayerMayCapturePoint( CBasePlayer *pPlayer, int iPointIndex, char *pszReason = NULL, int iMaxReasonLength = 0 ) { return true; }
virtual bool PlayerMayBlockPoint( CBasePlayer *pPlayer, int iPointIndex, char *pszReason = NULL, int iMaxReasonLength = 0 ) { return false; }
// Return false if players aren't allowed to cap points at this time (i.e. in WaitingForPlayers)
virtual bool PointsMayBeCaptured( void ) { return true; }
virtual void SetLastCapPointChanged( int iIndex ) { return; }
#ifdef CLIENT_DLL
#else
CTeamplayRules();
virtual ~CTeamplayRules() {};
virtual void Precache( void );
virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args );
virtual void ClientSettingsChanged( CBasePlayer *pPlayer );
virtual bool IsTeamplay( void );
virtual bool FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker, const CTakeDamageInfo &info );
virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget );
virtual bool PlayerCanHearChat( CBasePlayer *pListener, CBasePlayer *pSpeaker );
virtual const char *GetTeamID( CBaseEntity *pEntity );
virtual bool ShouldAutoAim( CBasePlayer *pPlayer, edict_t *target );
virtual int IPointsForKill( CBasePlayer *pAttacker, CBasePlayer *pKilled );
virtual void InitHUD( CBasePlayer *pl );
virtual void DeathNotice( CBasePlayer *pVictim, const CTakeDamageInfo &info );
virtual const char *GetGameDescription( void ) { return "Teamplay"; } // this is the game name that gets seen in the server browser
virtual void PlayerKilled( CBasePlayer *pVictim, const CTakeDamageInfo &info );
virtual void Think ( void );
virtual int GetTeamIndex( const char *pTeamName );
virtual const char *GetIndexedTeamName( int teamIndex );
virtual bool IsValidTeam( const char *pTeamName );
virtual const char *SetDefaultPlayerTeam( CBasePlayer *pPlayer );
virtual void ChangePlayerTeam( CBasePlayer *pPlayer, const char *pTeamName, bool bKill, bool bGib );
virtual void ClientDisconnected( edict_t *pClient );
virtual bool TimerMayExpire( void ) { return true; }
// A game has been won by the specified team
virtual void SetWinningTeam( int team, int iWinReason, bool bForceMapReset = true, bool bSwitchTeams = false, bool bDontAddScore = false ) { return; }
virtual void SetStalemate( int iReason, bool bForceMapReset = true, bool bSwitchTeams = false ) { return; }
// Used to determine if all players should switch teams
virtual void SetSwitchTeams( bool bSwitch ){ m_bSwitchTeams = bSwitch; }
virtual bool ShouldSwitchTeams( void ){ return m_bSwitchTeams; }
virtual void HandleSwitchTeams( void ){ return; }
// Used to determine if we should scramble the teams
virtual void SetScrambleTeams( bool bScramble ){ m_bScrambleTeams = bScramble; }
virtual bool ShouldScrambleTeams( void ){ return m_bScrambleTeams; }
virtual void HandleScrambleTeams( void ){ return; }
virtual bool PointsMayAlwaysBeBlocked(){ return false; }
protected:
bool m_DisableDeathMessages;
private:
void RecountTeams( void );
const char *TeamWithFewestPlayers( void );
bool m_DisableDeathPenalty;
bool m_teamLimit; // This means the server set only some teams as valid
char m_szTeamList[TEAMPLAY_TEAMLISTLENGTH];
bool m_bSwitchTeams;
bool m_bScrambleTeams;
#endif
};
inline CTeamplayRules* TeamplayGameRules()
{
return static_cast<CTeamplayRules*>(g_pGameRules);
}
#endif // TEAMPLAY_GAMERULES_H