//------------------------------------------------------------------------ void CVehicleViewFirstPerson::UpdateView(SViewParams &viewParams, EntityId playerId) { // JB: Attaching vehicles to trackview causes the view position to be out of date // by the time we reach Update view, introducing view lag. Need to re-update m_viewPosition = GetWorldPosGoal(); if (!m_passengerId) return; viewParams.nearplane = 0.02f; viewParams.fov = m_fov; if (EntityId weaponId = m_pVehicle->GetCurrentWeaponId(m_passengerId)) { if (IItem* pItem = CCryAction::GetCryAction()->GetIItemSystem()->GetItem(weaponId)) { if (pItem->FilterView(viewParams)) return; } } viewParams.position = m_viewPosition; viewParams.rotation = GetVehicleRotGoal() * Quat::CreateRotationXYZ(m_rotation); // set view direction on actor IActor* pActor = CCryAction::GetCryAction()->GetIActorSystem()->GetActor(playerId); if(pActor && pActor->IsClient()) { pActor->SetViewInVehicle(viewParams.rotation); } // recoil viewParams.rotation *= Quat::CreateRotationXYZ(m_viewAngleOffset); }
//------------------------------------------------------------------------ void CVehicleViewSteer::UpdateView(SViewParams &viewParams, EntityId playerId) { static bool doUpdate = true; if (!doUpdate) return; if (m_position.IsValid()) { viewParams.position = m_position; } else { CRY_ASSERT_MESSAGE(0, "camera position invalid"); } Vec3 dir = (m_lookAt - m_position).GetNormalizedSafe(); if (dir.IsValid() && dir.GetLengthSquared() > 0.01f) { viewParams.rotation = Quat::CreateRotationVDir(dir); } else { CRY_ASSERT_MESSAGE(0, "camera rotation invalid"); } // set view direction on actor IActor* pActor = m_pSeat->GetPassengerActor(true); if (pActor && pActor->IsClient()) { pActor->SetViewInVehicle(viewParams.rotation); } }