//----------------------------------------------------------------------------- // Purpose: Do the headlight //----------------------------------------------------------------------------- void CFlashlightEffect::UpdateLight( int nEntIdx, const Vector &vecPos, const Vector &vecForward, const Vector &vecRight, const Vector &vecUp, float flFov, float flFarZ, float flLinearAtten, bool castsShadows, const char* pTextureName ) { VPROF_BUDGET( __FUNCTION__, VPROF_BUDGETGROUP_SHADOW_DEPTH_TEXTURING ); m_nEntIndex = nEntIdx; m_flFov = flFov; m_flFarZ = flFarZ; m_flLinearAtten = flLinearAtten; if ( m_bCastsShadows != castsShadows ) { // requires recreation of the flashlight LightOff(); } m_bCastsShadows = castsShadows; UpdateFlashlightTexture( pTextureName ); FlashlightState_t state; if ( UpdateDefaultFlashlightState( state, vecPos, vecForward, vecRight, vecUp, castsShadows ) == false ) { return; } if( m_FlashlightHandle == CLIENTSHADOW_INVALID_HANDLE ) { m_FlashlightHandle = g_pClientShadowMgr->CreateFlashlight( state ); } else { if( !r_flashlightlockposition.GetBool() ) { g_pClientShadowMgr->UpdateFlashlightState( m_FlashlightHandle, state ); } } g_pClientShadowMgr->UpdateProjectedTexture( m_FlashlightHandle, true ); #ifndef NO_TOOLFRAMEWORK if ( clienttools->IsInRecordingMode() ) { KeyValues *msg = new KeyValues( "FlashlightState" ); msg->SetFloat( "time", gpGlobals->curtime ); msg->SetInt( "entindex", m_nEntIndex ); msg->SetInt( "flashlightHandle", m_FlashlightHandle ); msg->SetPtr( "flashlightState", &state ); ToolFramework_PostToolMessage( HTOOLHANDLE_INVALID, msg ); msg->deleteThis(); } #endif }
//============================================================================== // Constructor //============================================================================== CBaseFlashlightEffect::CBaseFlashlightEffect( int index, const char *pTextureName ) { m_nFlashlightHandle = CLIENTSHADOW_INVALID_HANDLE; m_iEntIndex = index; m_bIsOn = false; m_flDie = 0; m_flCurrentPullBackDist = 1.0f; m_bCastsShadows = true; m_bMuzzleFlashEnabled = false; m_flMuzzleFlashBrightness = 100.0f; // Iniciamos la textura de la luz UpdateFlashlightTexture( pTextureName ); }
//----------------------------------------------------------------------------- // Purpose: // Input : nEntIndex - The m_nEntIndex of the client entity that is creating us. // vecPos - The position of the light emitter. // vecDir - The direction of the light emission. //----------------------------------------------------------------------------- CFlashlightEffect::CFlashlightEffect(int nEntIndex, const char *pszTextureName, float flFov, float flFarZ, float flLinearAtten ) { m_FlashlightHandle = CLIENTSHADOW_INVALID_HANDLE; m_nEntIndex = nEntIndex; m_flCurrentPullBackDist = 1.0f; m_bMuzzleFlashEnabled = false; m_flMuzzleFlashBrightness = 1.0f; m_flFov = flFov; m_flFarZ = flFarZ; m_flLinearAtten = flLinearAtten; m_bCastsShadows = true; m_bIsOn = false; UpdateFlashlightTexture( pszTextureName ); m_MuzzleFlashTexture.Init( "effects/muzzleflash_light", TEXTURE_GROUP_OTHER, true ); }