|
36 | 36 | #include <vgui/ILocalize.h> |
37 | 37 | #include "hud_vote.h" |
38 | 38 | #include "ienginevgui.h" |
| 39 | +#include "viewpostprocess.h" |
39 | 40 | #include "sourcevr/isourcevirtualreality.h" |
40 | 41 | #if defined( _X360 ) |
41 | 42 | #include "xbox/xbox_console.h" |
@@ -291,6 +292,9 @@ ClientModeShared::ClientModeShared() |
291 | 292 | m_pWeaponSelection = NULL; |
292 | 293 | m_nRootSize[ 0 ] = m_nRootSize[ 1 ] = -1; |
293 | 294 |
|
| 295 | + m_pCurrentPostProcessController = NULL; |
| 296 | + m_PostProcessLerpTimer.Invalidate(); |
| 297 | + |
294 | 298 | #if defined( REPLAY_ENABLED ) |
295 | 299 | m_pReplayReminderPanel = NULL; |
296 | 300 | m_flReplayStartRecordTime = 0.0f; |
@@ -604,6 +608,8 @@ void ClientModeShared::Update() |
604 | 608 | m_pViewport->SetVisible( cl_drawhud.GetBool() ); |
605 | 609 | } |
606 | 610 |
|
| 611 | + UpdatePostProcessingEffects(); |
| 612 | + |
607 | 613 | UpdateRumbleEffects(); |
608 | 614 |
|
609 | 615 | if ( cl_show_num_particle_systems.GetBool() ) |
@@ -914,6 +920,17 @@ void ClientModeShared::LevelShutdown( void ) |
914 | 920 | s_hVGuiContext = DEFAULT_VGUI_CONTEXT; |
915 | 921 | } |
916 | 922 |
|
| 923 | +#ifdef MAPBASE |
| 924 | + // Always reset post-processing on level unload |
| 925 | + //if (m_pCurrentPostProcessController) |
| 926 | + { |
| 927 | + m_CurrentPostProcessParameters = PostProcessParameters_t(); |
| 928 | + m_LerpEndPostProcessParameters = PostProcessParameters_t(); |
| 929 | + m_pCurrentPostProcessController = NULL; |
| 930 | + SetPostProcessParams( &m_CurrentPostProcessParameters ); |
| 931 | + } |
| 932 | +#endif |
| 933 | + |
917 | 934 | // Reset any player explosion/shock effects |
918 | 935 | CLocalPlayerFilter filter; |
919 | 936 | enginesound->SetPlayerDSP( filter, 0, true ); |
@@ -988,6 +1005,69 @@ float ClientModeShared::GetViewModelFOV( void ) |
988 | 1005 | return v_viewmodel_fov.GetFloat(); |
989 | 1006 | } |
990 | 1007 |
|
| 1008 | +#ifdef MAPBASE |
| 1009 | +extern bool g_bPostProcessNeedsRestore; |
| 1010 | +#endif |
| 1011 | + |
| 1012 | +void ClientModeShared::UpdatePostProcessingEffects() |
| 1013 | +{ |
| 1014 | + C_PostProcessController* pNewPostProcessController = NULL; |
| 1015 | + C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer(); |
| 1016 | + |
| 1017 | + if (pPlayer) |
| 1018 | + pNewPostProcessController = pPlayer->GetActivePostProcessController(); |
| 1019 | + |
| 1020 | + if (!pNewPostProcessController) |
| 1021 | + { |
| 1022 | + m_CurrentPostProcessParameters = PostProcessParameters_t(); |
| 1023 | + m_pCurrentPostProcessController = NULL; |
| 1024 | + SetPostProcessParams( &m_CurrentPostProcessParameters ); |
| 1025 | + return; |
| 1026 | + } |
| 1027 | + |
| 1028 | + if (pNewPostProcessController != m_pCurrentPostProcessController) |
| 1029 | + m_pCurrentPostProcessController = pNewPostProcessController; |
| 1030 | + |
| 1031 | + // Start a lerp timer if the parameters changed, regardless of whether the controller changed |
| 1032 | + if (m_LerpEndPostProcessParameters != pNewPostProcessController->m_PostProcessParameters) |
| 1033 | + { |
| 1034 | + m_LerpStartPostProcessParameters = m_CurrentPostProcessParameters; |
| 1035 | + m_LerpEndPostProcessParameters = pNewPostProcessController ? pNewPostProcessController->m_PostProcessParameters : m_CurrentPostProcessParameters; |
| 1036 | + |
| 1037 | + float flFadeTime = pNewPostProcessController ? pNewPostProcessController->m_PostProcessParameters.m_flParameters[PPPN_FADE_TIME] : 0.0f; |
| 1038 | + if (flFadeTime <= 0.0f) |
| 1039 | + { |
| 1040 | + flFadeTime = 0.001f; |
| 1041 | + } |
| 1042 | + |
| 1043 | + m_PostProcessLerpTimer.Start( flFadeTime ); |
| 1044 | + } |
| 1045 | +#ifdef MAPBASE |
| 1046 | + // HACKHACK: Needs to be checked here because OnRestore() doesn't seem to run before a lerp begins |
| 1047 | + else if (g_bPostProcessNeedsRestore) |
| 1048 | + { |
| 1049 | + // The player just loaded a saved game. |
| 1050 | + // Don't fade parameters from 0; instead, take what's already there and assume they were already active. |
| 1051 | + // (we have no way of knowing if they were in the middle of a lerp) |
| 1052 | + m_PostProcessLerpTimer.Invalidate(); |
| 1053 | + g_bPostProcessNeedsRestore = false; |
| 1054 | + } |
| 1055 | +#endif |
| 1056 | + |
| 1057 | + // Lerp between old and new parameters |
| 1058 | + float flLerpFactor = 1.0f - m_PostProcessLerpTimer.GetRemainingRatio(); |
| 1059 | + for (int nParameter = 0; nParameter < POST_PROCESS_PARAMETER_COUNT; ++nParameter) |
| 1060 | + { |
| 1061 | + m_CurrentPostProcessParameters.m_flParameters[nParameter] = |
| 1062 | + Lerp( |
| 1063 | + flLerpFactor, |
| 1064 | + m_LerpStartPostProcessParameters.m_flParameters[nParameter], |
| 1065 | + m_LerpEndPostProcessParameters.m_flParameters[nParameter] ); |
| 1066 | + } |
| 1067 | + |
| 1068 | + SetPostProcessParams( &m_CurrentPostProcessParameters ); |
| 1069 | +} |
| 1070 | + |
991 | 1071 | class CHudChat; |
992 | 1072 |
|
993 | 1073 | bool PlayerNameNotSetYet( const char *pszName ) |
|
0 commit comments