void CLocalPlayerComponent::StartFreeFallDeath() { m_bIsInFreeFallDeath = true; Vec3 currentLook = m_rPlayer.GetEntity()->GetWorldTM().GetColumn1(); currentLook.z = tan_tpl(DEG2RAD(g_pGameCVars->pl_freeFallDeath_cameraAngle)); currentLook.Normalize(); m_freeFallLookTarget = currentLook; }
//------------------------------------------------------------------------ void CIronSight::UpdateDepthOfField(CActor *pActor, float frameTime, float t) { if(pActor) { CPlayer *pPlayer = static_cast<CPlayer *>(pActor); if(IMovementController *pMV = pActor->GetMovementController()) { SMovementState ms; pMV->GetMovementState(ms); Vec3 start = ms.eyePosition; Vec3 dir = ms.eyeDirection; static ray_hit hit; IPhysicalEntity *pSkipEntities[10]; int nSkip = CSingle::GetSkipEntities(m_pWeapon, pSkipEntities, 10); // jitter the direction (non-uniform disk sampling ... we want to bias the center in this case) f32 cosTheta, sinTheta; f32 theta = Random() * gf_PI2; f32 spreadAngle = DEG2RAD(g_pGameCVars->g_dof_sampleAngle)/2.0f; f32 scale = tan_tpl(spreadAngle); f32 radiusSqrt = scale * Random(); sincos_tpl(theta, &cosTheta, &sinTheta); f32 x = radiusSqrt * cosTheta; f32 y = radiusSqrt * sinTheta; Matrix33 viewRotation(pPlayer->GetViewQuatFinal()); Vec3 xOff = x * viewRotation.GetColumn0(); Vec3 yOff = y * viewRotation.GetColumn2(); // jitter if(true) { dir += xOff + yOff; dir.Normalize(); } const float maxRelaxSpeed = 1.0f; f32 delta; if(gEnv->pPhysicalWorld->RayWorldIntersection(start, 1000.0f*dir, ent_all, rwi_pierceability(10)|rwi_ignore_back_faces, &hit, 1, pSkipEntities, nSkip)) { delta = g_pGameCVars->g_dof_minHitScale*hit.dist - m_minDoF; Limit(delta, -g_pGameCVars->g_dof_minAdjustSpeed, g_pGameCVars->g_dof_minAdjustSpeed); //delta *= fabs(delta/minAdjustSpeed); m_minDoF += delta * frameTime; delta = g_pGameCVars->g_dof_maxHitScale*hit.dist - m_maxDoF; Limit(delta, -g_pGameCVars->g_dof_maxAdjustSpeed, g_pGameCVars->g_dof_maxAdjustSpeed); //delta *= fabs(delta/maxAdjustSpeed); m_maxDoF += delta * frameTime; } if(m_maxDoF - g_pGameCVars->g_dof_distAppart < m_minDoF) { m_maxDoF = m_minDoF + g_pGameCVars->g_dof_distAppart; } else { // relax max to min delta = m_minDoF - m_maxDoF; Limit(delta, -maxRelaxSpeed, maxRelaxSpeed); //delta *= fabs(delta/maxRelaxSpeed); m_maxDoF += delta * frameTime; } // the average is relaxed to the center between min and max m_averageDoF = (m_maxDoF - m_minDoF)/2.0f; Limit(delta, -g_pGameCVars->g_dof_averageAdjustSpeed, g_pGameCVars->g_dof_averageAdjustSpeed); //delta *= fabs(delta/averageAdjustSpeed); m_averageDoF += delta * frameTime; } } }