void C_ParticleSmokeGrenade::ClientThink() { if ( m_CurrentStage == 1 ) { // Add our influence to the global smoke fog alpha. ASSERT_LOCAL_PLAYER_RESOLVABLE(); int nSlot = GET_ACTIVE_SPLITSCREEN_SLOT(); float testDist = (MainViewOrigin(nSlot) - m_SmokeBasePos).Length(); float fadeEnd = m_ExpandRadius; // The center of the smoke cloud that always gives full fog overlay float flCoreDistance = fadeEnd * 0.15; if(testDist < fadeEnd) { if( testDist < flCoreDistance ) { EngineGetSmokeFogOverlayAlpha() += m_FadeAlpha; } else { EngineGetSmokeFogOverlayAlpha() += (1 - ( testDist - flCoreDistance ) / ( fadeEnd - flCoreDistance ) ) * m_FadeAlpha; } } } }
CHud &GetHud( int nSlot /*= -1*/ ) { if ( nSlot == -1 ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); nSlot = GET_ACTIVE_SPLITSCREEN_SLOT(); } return gHUD[ nSlot ]; }
//----------------------------------------------------------------------------- // Purpose: // Output : const CViewSetup //----------------------------------------------------------------------------- const CViewSetup *CViewRender::GetPlayerViewSetup( int nSlot /*= -1*/ ) const { // NOTE: This code path doesn't require m_bAllowViewAccess == true!!! if ( nSlot == -1 ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); return &m_UserView[ GET_ACTIVE_SPLITSCREEN_SLOT() ]; } return &m_UserView[ nSlot ]; }
const CViewSetup &CViewRender::GetView(int nSlot /*= -1*/) const { Assert( m_bAllowViewAccess ); if ( nSlot == -1 ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); return m_UserView[ GET_ACTIVE_SPLITSCREEN_SLOT() ]; } return m_UserView[ nSlot ]; }
//----------------------------------------------------------------------------- // Purpose: This is called every time the DLL is loaded //----------------------------------------------------------------------------- void CHud::Init( void ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); m_nSplitScreenSlot = GET_ACTIVE_SPLITSCREEN_SLOT(); g_HudHelper.Init(); InitFonts(); // Create all the Hud elements CHudElementHelper::CreateAllElements(); gLCD.Init(); // Initialize all created elements for ( int i = 0; i < GetHudList().Count(); i++ ) { GetHudList()[ i ]->Init(); } KeyValues *kv = new KeyValues( "layout" ); if ( kv ) { if ( kv->LoadFromFile( filesystem, "scripts/HudLayout.res" ) ) { int numelements = GetHudList().Count(); for ( int i = 0; i < numelements; i++ ) { CHudElement *element = GetHudList()[i]; vgui::Panel *pPanel = GetHudPanelList()[i]; KeyValues *key = kv->FindKey( pPanel->GetName(), false ); if ( !key ) { Msg( "Hud element '%s' doesn't have an entry '%s' in scripts/HudLayout.res\n", element->GetName(), pPanel->GetName() ); } // Note: When a panel is parented to the module root, it's "parent" is returned as NULL. if ( !element->IsParentedToClientDLLRootPanel() && !pPanel->GetParent() ) { DevMsg( "Hud element '%s'/'%s' doesn't have a parent\n", element->GetName(), pPanel->GetName() ); } } } kv->deleteThis(); } if ( GET_ACTIVE_SPLITSCREEN_SLOT() == 0 ) { HudIcons().Init(); } }
//----------------------------------------------------------------------------- CFlashlightEffectManager & FlashlightEffectManager( int32 nSplitscreenPlayerOverride ) { static CFlashlightEffectManager s_flashlightEffectManagerArray[ MAX_SPLITSCREEN_PLAYERS ]; if ( nSplitscreenPlayerOverride != -1 ) { return s_flashlightEffectManagerArray[ nSplitscreenPlayerOverride ]; } ASSERT_LOCAL_PLAYER_RESOLVABLE(); return s_flashlightEffectManagerArray[ GET_ACTIVE_SPLITSCREEN_SLOT() ]; }
//----------------------------------------------------------------------------- // Purpose: // Input : *name - // hook - //----------------------------------------------------------------------------- void CUserMessages::HookMessage( const char *name, pfnUserMsgHook hook ) { #if defined( CLIENT_DLL ) Assert( name ); Assert( hook ); int idx = m_UserMessages.Find( name ); if ( idx == m_UserMessages.InvalidIndex() ) { DevMsg( "CUserMessages::HookMessage: no such message %s\n", name ); Assert( 0 ); return; } ASSERT_LOCAL_PLAYER_RESOLVABLE(); int i = m_UserMessages[ idx ]->clienthooks[ GET_ACTIVE_SPLITSCREEN_SLOT() ].AddToTail(); m_UserMessages[ idx ]->clienthooks[GET_ACTIVE_SPLITSCREEN_SLOT()][i] = hook; #else Error( "CUserMessages::HookMessage called from server code!!!\n" ); #endif }
void MsgFunc_ResetHUD( bf_read &msg ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); gHUD[ GET_ACTIVE_SPLITSCREEN_SLOT() ].MsgFunc_ResetHUD( msg ); }
//----------------------------------------------------------------------------- // Sets up the view parameters //----------------------------------------------------------------------------- void CViewRender::SetUpView() { ASSERT_LOCAL_PLAYER_RESOLVABLE(); int nSlot = GET_ACTIVE_SPLITSCREEN_SLOT(); m_bAllowViewAccess = true; VPROF("CViewRender::SetUpView"); // Initialize view structure with default values float farZ = GetZFar(); CViewSetup &view = GetView(); view.zFar = farZ; view.zFarViewmodel = farZ; // UNDONE: Make this farther out? // closest point of approach seems to be view center to top of crouched box view.zNear = GetZNear(); view.zNearViewmodel = 1; view.fov = default_fov.GetFloat(); view.m_bOrtho = false; // Enable spatial partition access to edicts partition->SuppressLists( PARTITION_ALL_CLIENT_EDICTS, false ); C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); bool bNoViewEnt = false; if( pPlayer == NULL ) { pPlayer = GetSplitScreenViewPlayer( nSlot ); bNoViewEnt = true; } if ( g_bEngineIsHLTV ) { HLTVCamera()->CalcView( view.origin, view.angles, view.fov ); } #if defined( REPLAY_ENABLED ) else if ( engine->IsReplay() ) { ReplayCamera()->CalcView( view.origin, view.angles, view.fov ); } #endif else { // FIXME: Are there multiple views? If so, then what? // FIXME: What happens when there's no player? if (pPlayer) { pPlayer->CalcView( view.origin, view.angles, view.zNear, view.zFar, view.fov ); // If we are looking through another entities eyes, then override the angles/origin for GetView() int viewentity = render->GetViewEntity(); if ( !bNoViewEnt && !g_nKillCamMode && (pPlayer->entindex() != viewentity) ) { C_BaseEntity *ve = cl_entitylist->GetEnt( viewentity ); if ( ve ) { VectorCopy( ve->GetAbsOrigin(), view.origin ); VectorCopy( ve->GetAbsAngles(), view.angles ); } } pPlayer->CalcViewModelView( view.origin, view.angles ); // Is this the proper place for this code? if ( cl_camera_follow_bone_index.GetInt() >= -1 && input->CAM_IsThirdPerson() ) { VectorCopy( g_cameraFollowPos, view.origin ); } } // Even if the engine is paused need to override the view // for keeping the camera control during pause. GetClientMode()->OverrideView( &GetView() ); } // give the toolsystem a chance to override the view ToolFramework_SetupEngineView( view.origin, view.angles, view.fov ); if ( engine->IsPlayingDemo() ) { if ( cl_demoviewoverride.GetFloat() > 0.0f ) { // Retreive view angles from engine ( could have been set in IN_AdjustAngles above ) CalcDemoViewOverride( view.origin, view.angles ); } else { s_DemoView = view.origin; s_DemoAngle = view.angles; } } // Disable spatial partition access partition->SuppressLists( PARTITION_ALL_CLIENT_EDICTS, true ); //Find the offset our current FOV is from the default value float flFOVOffset = default_fov.GetFloat() - view.fov; //Adjust the viewmodel's FOV to move with any FOV offsets on the viewer's end view.fovViewmodel = GetClientMode()->GetViewModelFOV() - flFOVOffset; // Compute the world->main camera transform ComputeCameraVariables( view.origin, view.angles, &g_vecVForward[ nSlot ], &g_vecVRight[ nSlot ], &g_vecVUp[ nSlot ], &g_matCamInverse[ nSlot ] ); // set up the hearing origin... AudioState_t audioState; audioState.m_Origin = view.origin; audioState.m_Angles = view.angles; audioState.m_bIsUnderwater = pPlayer && pPlayer->AudioStateIsUnderwater( view.origin ); ToolFramework_SetupAudioState( audioState ); view.origin = audioState.m_Origin; view.angles = audioState.m_Angles; GetClientMode()->OverrideAudioState( &audioState ); engine->SetAudioState( audioState ); g_vecPrevRenderOrigin[ nSlot ] = g_vecRenderOrigin[ nSlot ]; g_vecPrevRenderAngles[ nSlot ] = g_vecRenderAngles[ nSlot ]; g_vecRenderOrigin[ nSlot ] = view.origin; g_vecRenderAngles[ nSlot ] = view.angles; #ifdef DBGFLAG_ASSERT s_DbgSetupOrigin[ nSlot ] = view.origin; s_DbgSetupAngles[ nSlot ] = view.angles; #endif m_bAllowViewAccess = false; }
CASW_Video_Face_BIKHandles* CASW_Video::GetVideoFaceBIKHandles( void ) { ASSERT_LOCAL_PLAYER_RESOLVABLE(); return &( s_VideoFaceBIKHandles[ GET_ACTIVE_SPLITSCREEN_SLOT() ] ); }
IClientMode *GetClientMode() { ASSERT_LOCAL_PLAYER_RESOLVABLE(); return g_pClientMode[ GET_ACTIVE_SPLITSCREEN_SLOT() ]; }
//==================================================================== //==================================================================== InClientMode* GetInClientMode() { ASSERT_LOCAL_PLAYER_RESOLVABLE(); return &g_ClientModeNormal[ GET_ACTIVE_SPLITSCREEN_SLOT() ]; }