//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef CS_CLIENTMODE_H #define CS_CLIENTMODE_H #ifdef _WIN32 #pragma once #endif #include "clientmode_shared.h" #include "counterstrikeviewport.h" #include "matchmaking/imatchframework.h" #include "c_cs_player.h" #include "usermessages.h" enum PostProcessEffect_t { POST_EFFECT_DEFAULT = 0, POST_EFFECT_LOW_HEATH, // 1st person event POST_EFFECT_VERY_LOW_HEATH, POST_EFFECT_IN_BUY_MENU, // 1st person event POST_EFFECT_DEATH_CAM, // 1st person event POST_EFFECT_SPECTATING, // 1st person state POST_EFFECT_IN_FIRE, POST_EFFECT_ZOOMED_RIFLE, POST_EFFECT_ZOOMED_SNIPER, POST_EFFECT_ZOOMED_SNIPER_MOVING, POST_EFFECT_UNDER_WATER, POST_EFFECT_ROUND_END_VIA_BOMBING, POST_EFFECT_SPEC_CAMERA_LERPING, POST_EFFECT_MAP_CONTROLLED, POST_EFFECT_DEATH_CAM_BODYSHOT, // 1st person event POST_EFFECT_DEATH_CAM_HEADSHOT, // 1st person event NUM_POST_EFFECTS }; enum RoundStatus_t { ROUND_UNKNOWN = 0, ROUND_STARTED, ROUND_ENDED, ROUND_ENDED_VIA_BOMBING }; struct PostProcessEffectParams_t { float fLocalContrastStrength; float fLocalContrastEdgeStrength; float fVignetteStart; float fVignetteEnd; float fVignetteBlurStrength; float fFadeToBlackStrength; }; enum SyncKeyBindingValueDirection_t { KEYBINDING_WRITE_TO_TITLEDATA, KEYBINDING_READ_FROM_TITLEDATA }; class SpecCameraPosition_t { public: Vector vecPosition; Vector vecAngles; float flWeight; }; class ClientModeCSNormal : public ClientModeShared, public IMatchEventsSink { DECLARE_CLASS( ClientModeCSNormal, ClientModeShared ); private: // IClientMode overrides. public: ClientModeCSNormal(); ~ClientModeCSNormal(); virtual void OnEvent( KeyValues *pEvent ); virtual void Init(); virtual void InitViewport(); // dgoodenough - fix GCC shortcoming // PS3_BUILDFIX virtual void InitViewport( bool bOnlyBaseClass = false ); virtual void Update(); virtual void LevelShutdown( void ); virtual int KeyInput( int down, ButtonCode_t keynum, const char *pszCurrentBinding ); int GetDeathMessageStartHeight( void ); virtual void FireGameEvent( IGameEvent *event ); virtual void PostRenderVGui(); virtual void PreRender(CViewSetup *pSetup) OVERRIDE; virtual bool ShouldDrawViewModel( void ); virtual bool CanRecordDemo( char *errorMsg, int length ) const; virtual wchar_t* GetServerName( void ) { return m_pServerName; } virtual void SetServerName( wchar_t *name ); virtual wchar_t* GetMapName( void ) { return m_pMapName; } virtual void SetMapName( wchar_t *name ); virtual void SetBlurFade( float scale ); virtual float GetBlurFade( void ) { return 0; } virtual void DoPostScreenSpaceEffects( const CViewSetup *pSetup ); virtual void UpdateColorCorrectionWeights( void ); virtual void OnColorCorrectionWeightsReset( void ); virtual float GetColorCorrectionScale( void ) const; void SetupStaticCameras( void ); bool GetIdealCameraPosForPlayer( int playerindex ); void LoadPostProcessParamsFromFile( const char* pFileName = NULL ); void UpdatePostProcessingEffects(); void PostProcessLerpTo( PostProcessEffect_t effectID, float fFadeDuration = 0.75f, const PostProcessParameters_t* pTargetParams = NULL ); void PostProcessLerpTo( PostProcessEffect_t effectID, const C_PostProcessController* pPPController ); void DoPostProcessParamLerp(); void LerpPostProcessParam( float fAmount, PostProcessParameters_t& result, const PostProcessParameters_t& from, const PostProcessParameters_t& to ) const; PostProcessEffect_t PostProcessEffectFromName( const char* pName ) const; void GetDefaultPostProcessingParams( C_CSPlayer* pPlayer, PostProcessEffectParams_t* pParams ); void SyncCurrentKeyBindingsToDeviceTitleData( int iController, int eDevice, const SyncKeyBindingValueDirection_t eOp ); void CheckTitleDataStorageConnected( void ); #if !defined(NO_STEAM) && !defined (_PS3) STEAM_CALLBACK_MANUAL( ClientModeCSNormal, OnScreenshotRequested, ScreenshotRequested_t, m_CallbackScreenshotRequested ); #endif CUserMessageBinder m_UMCMsgKillCam; CUserMessageBinder m_UMCMsgMatchEndConditions; CUserMessageBinder m_UMCMsgDisconnectToLobby; CUserMessageBinder m_UMCMsgDisplayInventory; CUserMessageBinder m_UMCMsgWarmupHasEnded; CUserMessageBinder m_UMCMsgServerRankUpdate; CUserMessageBinder m_UMCMsgServerRankRevealAll; CUserMessageBinder m_UMCMsgScoreLeaderboardData; CUserMessageBinder m_UMCMsgGlowPropTurnOff; CUserMessageBinder m_UMCMsgXpUpdate; CUserMessageBinder m_UMCMsgQuestProgress; CUserMessageBinder m_UMCMsgPlayerDecalDigitalSignature; private: //int CameraSortFunction( SpecCameraPosition_t* entry1, SpecCameraPosition_t* entry2 ); wchar_t m_pServerName[256]; wchar_t m_pMapName[256]; CHandle m_hCurrentColorCorrection; // void UpdateSpectatorMode( void ); ClientCCHandle_t m_CCKillCamReplay; // handle to death cc effect float m_CCKillCamReplayPercent; ClientCCHandle_t m_CCDeathHandle; // handle to death cc effect float m_CCDeathPercent; ClientCCHandle_t m_CCFreezePeriodHandle_CT; float m_CCFreezePeriodPercent_CT; ClientCCHandle_t m_CCFreezePeriodHandle_T; float m_CCFreezePeriodPercent_T; ClientCCHandle_t m_CCPlayerFlashedHandle; float m_CCPlayerFlashedPercent; RoundStatus_t m_iRoundStatus; float m_fDelayedCTWinTime; static PostProcessParameters_t ms_postProcessParams[]; static const char* ms_postProcessEffectNames[]; PostProcessEffect_t m_activePostProcessEffect; PostProcessEffect_t m_lastPostProcessEffect; const C_PostProcessController* m_pActivePostProcessController; CountdownTimer m_postProcessEffectCountdown; PostProcessParameters_t m_postProcessLerpStartParams; PostProcessParameters_t m_postProcessLerpEndParams; PostProcessParameters_t m_postProcessCurrentParams; CUtlVector< SpecCameraPosition_t > m_SpecCameraPositions; int m_nRoundMVP; public: struct CQuestUncommittedProgress_t { uint32 m_numNormalPoints; double m_dblNormalPointsProgressTime; uint32 m_numNormalPointsProgressBaseline; bool m_bIsEventQuest; }; static CUtlMap< uint32, CQuestUncommittedProgress_t, uint32, CDefLess< uint32 > > sm_mapQuestProgressUncommitted; static ScoreLeaderboardData s_ScoreLeaderboardData; static uint32 s_numLevelTransitions; }; extern IClientMode *GetClientModeNormal(); extern ClientModeCSNormal* GetClientModeCSNormal(); #endif // CS_CLIENTMODE_H