//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $Workfile: $ // $Date: $ // //----------------------------------------------------------------------------- // $Log: $ // // $NoKeywords: $ //=============================================================================// #ifndef HL2MP_GAMERULES_H #define HL2MP_GAMERULES_H #pragma once #include "gamerules.h" #include "teamplay_gamerules.h" #include "gamevars_shared.h" #ifndef CLIENT_DLL #include "hl2mp_player.h" #endif #define VEC_CROUCH_TRACE_MIN HL2MPRules()->GetHL2MPViewVectors()->m_vCrouchTraceMin #define VEC_CROUCH_TRACE_MAX HL2MPRules()->GetHL2MPViewVectors()->m_vCrouchTraceMax enum { TEAM_COMBINE = 2, TEAM_REBELS, }; #ifdef CLIENT_DLL #define CHL2MPRules C_HL2MPRules #define CHL2MPGameRulesProxy C_HL2MPGameRulesProxy #endif class CHL2MPGameRulesProxy : public CGameRulesProxy { public: DECLARE_CLASS( CHL2MPGameRulesProxy, CGameRulesProxy ); DECLARE_NETWORKCLASS(); }; class HL2MPViewVectors : public CViewVectors { public: HL2MPViewVectors( Vector vView, Vector vHullMin, Vector vHullMax, Vector vDuckHullMin, Vector vDuckHullMax, Vector vDuckView, Vector vObsHullMin, Vector vObsHullMax, Vector vDeadViewHeight, Vector vCrouchTraceMin, Vector vCrouchTraceMax ) : CViewVectors( vView, vHullMin, vHullMax, vDuckHullMin, vDuckHullMax, vDuckView, vObsHullMin, vObsHullMax, vDeadViewHeight ) { m_vCrouchTraceMin = vCrouchTraceMin; m_vCrouchTraceMax = vCrouchTraceMax; } Vector m_vCrouchTraceMin; Vector m_vCrouchTraceMax; }; class CHL2MPRules : public CTeamplayRules { public: DECLARE_CLASS( CHL2MPRules, CTeamplayRules ); #ifdef CLIENT_DLL DECLARE_CLIENTCLASS_NOBASE(); // This makes datatables able to access our private vars. #else DECLARE_SERVERCLASS_NOBASE(); // This makes datatables able to access our private vars. #endif CHL2MPRules(); virtual ~CHL2MPRules(); virtual void Precache( void ); virtual bool ShouldCollide( int collisionGroup0, int collisionGroup1 ); virtual bool ClientCommand( CBaseEntity *pEdict, const CCommand &args ); virtual float FlWeaponRespawnTime( CBaseCombatWeapon *pWeapon ); virtual float FlWeaponTryRespawn( CBaseCombatWeapon *pWeapon ); virtual Vector VecWeaponRespawnSpot( CBaseCombatWeapon *pWeapon ); virtual int WeaponShouldRespawn( CBaseCombatWeapon *pWeapon ); virtual void Think( void ); virtual void CreateStandardEntities( void ); virtual void ClientSettingsChanged( CBasePlayer *pPlayer ); virtual int PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ); virtual void GoToIntermission( void ); virtual void DeathNotice( CBasePlayer *pVictim, const CTakeDamageInfo &info ); virtual const char *GetGameDescription( void ); // derive this function if you mod uses encrypted weapon info files virtual const unsigned char *GetEncryptionKey( void ) { return (unsigned char *)"x9Ke0BY7"; } virtual const CViewVectors* GetViewVectors() const; const HL2MPViewVectors* GetHL2MPViewVectors() const; float GetMapRemainingTime(); void CleanUpMap(); void CheckRestartGame(); void RestartGame(); #ifndef CLIENT_DLL virtual Vector VecItemRespawnSpot( CItem *pItem ); virtual QAngle VecItemRespawnAngles( CItem *pItem ); virtual float FlItemRespawnTime( CItem *pItem ); virtual bool CanHavePlayerItem( CBasePlayer *pPlayer, CBaseCombatWeapon *pItem ); virtual bool FShouldSwitchWeapon( CBasePlayer *pPlayer, CBaseCombatWeapon *pWeapon ); void AddLevelDesignerPlacedObject( CBaseEntity *pEntity ); void RemoveLevelDesignerPlacedObject( CBaseEntity *pEntity ); void ManageObjectRelocation( void ); void CheckChatForReadySignal( CHL2MP_Player *pPlayer, const char *chatmsg ); const char *GetChatFormat( bool bTeamOnly, CBasePlayer *pPlayer ); #endif virtual void ClientDisconnected( edict_t *pClient ); bool CheckGameOver( void ); bool IsIntermission( void ); void PlayerKilled( CBasePlayer *pVictim, const CTakeDamageInfo &info ); bool IsTeamplay( void ) { return m_bTeamPlayEnabled; } void CheckAllPlayersReady( void ); virtual bool IsConnectedUserInfoChangeAllowed( CBasePlayer *pPlayer ); private: CNetworkVar( bool, m_bTeamPlayEnabled ); CNetworkVar( float, m_flGameStartTime ); CUtlVector m_hRespawnableItemsAndWeapons; float m_tmNextPeriodicThink; float m_flRestartGameTime; bool m_bCompleteReset; bool m_bAwaitingReadyRestart; bool m_bHeardAllPlayersReady; #ifndef CLIENT_DLL bool m_bChangelevelDone; #endif }; inline CHL2MPRules* HL2MPRules() { return static_cast(g_pGameRules); } #endif //HL2MP_GAMERULES_H