void CUIHUD3D::UpdateView(const SViewParams &viewParams) { CActor* pLocalPlayer = (CActor*)g_pGame->GetIGameFramework()->GetClientActor(); if (gEnv->IsEditor() && !gEnv->IsEditing() && !m_pHUDRootEntity) SpawnHudEntities(); if (m_pHUDRootEntity && pLocalPlayer) { Vec3 position = viewParams.position; const Vec3 viewDir = viewParams.rotation.GetColumn1(); Vec3 vOffset(0,0,0); if (!pLocalPlayer->IsDead() && pLocalPlayer->GetLinkedVehicle() == NULL) { const Vec3 eyePos = pLocalPlayer->GetLocalEyePos2(); const Vec3 cameraXAxis = viewParams.rotation.GetColumn0(); const float difZ = (eyePos.z - 1.68f) * 0.4f; const float difX = (eyePos.x - 0.12f) * 0.15f; vOffset += cameraXAxis * difX; vOffset += Vec3(0, 0, difZ); } const float distance = g_pGameCVars->g_hud3D_cameraOverride ? g_pGameCVars->g_hud3d_cameraDistance : m_fHudDist; const float offset = g_pGameCVars->g_hud3D_cameraOverride ? g_pGameCVars->g_hud3d_cameraOffsetZ : m_fHudZOffset; vOffset += Vec3(0, 0, offset); position += vOffset; position += viewDir * distance; static const Quat rot90Deg = Quat::CreateRotationXYZ( Ang3(gf_PI * 0.5f, 0, 0) ); const Quat rotation = viewParams.rotation * rot90Deg; // rotate 90 degrees around X-Axis m_pHUDRootEntity->SetPos(position); m_pHUDRootEntity->SetRotation(rotation); } }