float GlowSightDistance( const Vector &glowOrigin, bool bShouldTrace ) { float dist = (glowOrigin - CurrentViewOrigin()).Length(); C_BasePlayer *local = C_BasePlayer::GetLocalPlayer(); if ( local ) { dist *= local->GetFOVDistanceAdjustFactor(); } if ( bShouldTrace ) { Vector end = glowOrigin; // HACKHACK: trace 4" from destination in case the glow is inside some parent object // allow a little error... if ( dist > 4 ) { end -= CurrentViewForward()*4; } int traceFlags = MASK_OPAQUE|CONTENTS_MONSTER|CONTENTS_DEBRIS; CTraceFilterGlow filter(NULL, COLLISION_GROUP_NONE); trace_t tr; UTIL_TraceLine( CurrentViewOrigin(), end, traceFlags, &filter, &tr ); if ( tr.fraction != 1.0f ) return -1; } return dist; }
float C_FuncAreaPortalWindow::GetDistanceBlend() { // Get the viewer's distance to us. float flDist = CollisionProp()->CalcDistanceFromPoint( CurrentViewOrigin() ); C_BasePlayer *local = C_BasePlayer::GetLocalPlayer(); if ( local ) { flDist *= local->GetFOVDistanceAdjustFactor(); } float flAlpha = RemapVal( flDist, m_flFadeStartDist, m_flFadeDist, m_flTranslucencyLimit, 1 ); flAlpha = clamp( flAlpha, m_flTranslucencyLimit, 1 ); return flAlpha; }
//----------------------------------------------------------------------------- // Compute distance fade //----------------------------------------------------------------------------- static unsigned char ComputeDistanceFade( C_BaseEntity *pEntity, float flMinDist, float flMaxDist ) { if ((flMinDist <= 0) && (flMaxDist <= 0)) return 255; if( flMinDist > flMaxDist ) { swap( flMinDist, flMaxDist ); } // If a negative value is provided for the min fade distance, then base it off the max. if( flMinDist < 0 ) { flMinDist = flMaxDist - 400; if( flMinDist < 0 ) { flMinDist = 0; } } flMinDist *= flMinDist; flMaxDist *= flMaxDist; float flCurrentDistanceSq = CurrentViewOrigin().DistToSqr( pEntity->WorldSpaceCenter() ); C_BasePlayer *pLocal = C_BasePlayer::GetLocalPlayer(); if ( pLocal ) { float flDistFactor = pLocal->GetFOVDistanceAdjustFactor(); flCurrentDistanceSq *= flDistFactor * flDistFactor; } // If I'm inside the minimum range than don't resort to alpha trickery if ( flCurrentDistanceSq <= flMinDist ) return 255; if ( flCurrentDistanceSq >= flMaxDist ) return 0; // NOTE: Because of the if-checks above, flMinDist != flMinDist here float flFalloffFactor = 255.0f / (flMaxDist - flMinDist); int nAlpha = flFalloffFactor * (flMaxDist - flCurrentDistanceSq); return clamp( nAlpha, 0, 255 ); }