void C_Prop_ASW_Fade::ClientThink() { BaseClass::ClientThink(); C_ASW_Player *pPlayer = C_ASW_Player::GetLocalASWPlayer(); if (!pPlayer) { return; } C_ASW_Marine *pMarine = pPlayer->GetViewMarine(); bool bFade = pPlayer->GetASWControls() == 1 && pMarine && pMarine->GetAbsOrigin().z <= m_vecFadeOrigin.z; byte target = bFade ? m_nFadeOpacity : m_nNormalOpacity; byte prev = bFade ? m_nNormalOpacity : m_nFadeOpacity; if (bFade != m_bFaded) { m_bFaded = bFade; m_flInterpStart = gpGlobals->curtime - fabs((m_nFadeOpacity != m_nNormalOpacity) ? asw_fade_duration.GetFloat() * (GetRenderAlpha() - prev) / (m_nFadeOpacity - m_nNormalOpacity) : asw_fade_duration.GetFloat()); m_flInterpStart = MAX(0, m_flInterpStart); } if ( pPlayer->GetASWControls() != m_iLastControls || pMarine != m_hLastMarine.Get() ) { m_iLastControls = pPlayer->GetASWControls(); m_hLastMarine = pMarine; m_flInterpStart = 0; SetRenderAlpha(target); return; } if (m_flInterpStart + asw_fade_duration.GetFloat() <= gpGlobals->curtime) { SetRenderAlpha(target); } else if (m_flInterpStart > 0) { SetRenderAlpha(Lerp((gpGlobals->curtime - m_flInterpStart) / asw_fade_duration.GetFloat(), prev, target)); } }
void CASWHudCrosshair::Paint( void ) { VPROF_BUDGET( "CASWHudCrosshair::Paint", VPROF_BUDGETGROUP_ASW_CLIENT ); if ( !crosshair.GetBool() ) return; if ( engine->IsDrawingLoadingImage() || engine->IsPaused() || !engine->IsActiveApp() ) return; C_ASW_Player* pPlayer = C_ASW_Player::GetLocalASWPlayer(); if ( !pPlayer ) return; if ( pPlayer->GetFlags() & FL_FROZEN ) return; if ( pPlayer->entindex() != render->GetViewEntity() ) return; m_curViewAngles = CurrentViewAngles(); m_curViewOrigin = CurrentViewOrigin(); C_ASW_Marine *pMarine = pPlayer->GetViewMarine(); bool bControllingTurret = (pMarine && pMarine->IsControllingTurret()); if ( bControllingTurret ) { PaintTurretTextures(); return; // don't draw the normal cross hair in addition } int x, y; GetCurrentPos( x, y ); int nCrosshair = GetCurrentCrosshair( x, y ); if ( nCrosshair == m_nCrosshairTexture ) { if ( pPlayer->IsSniperScopeActive() ) { DrawSniperScope( x, y ); } else { if ( pPlayer->GetASWControls() != 1 ) return; DrawDirectionalCrosshair( x, y, YRES( asw_crosshair_progress_size.GetInt() ) ); } } else if ( nCrosshair != -1 ) { const float fCrosshairScale = 1.0f; int w = YRES( 20 ) * fCrosshairScale; int h = YRES( 20 ) * fCrosshairScale; surface()->DrawSetColor( m_clrCrosshair ); surface()->DrawSetTexture( nCrosshair ); surface()->DrawTexturedRect( x - w, y - h, x + w, y + h ); } // icons attached to the cursor x += 32; y += 16; // move them down and to the right a bit if ( m_bShowGiveAmmo ) { // todo: this text should in the ammo report tooltip? const wchar_t *ammoName = g_pVGuiLocalize->Find(GetAmmoName(m_iShowGiveAmmoType)); DrawAttachedIcon(m_nGiveAmmoTexture, x, y, ammoName); } else if (m_bShowGiveHealth) { DrawAttachedIcon(m_nGiveHealthTexture, x, y); } }