//------------------------------------------------------------------------ Vec3 CVehicleViewFirstPerson::GetWorldPosGoal() { Vec3 vehiclePos; if (m_pHelper) { vehiclePos = m_pHelper->GetVehicleSpaceTranslation(); } else if(!m_sCharacterBoneName.empty()) { Vec3 bonePos; IEntity* pEntity = gEnv->pEntitySystem->GetEntity(m_pSeat->GetPassenger()); ICharacterInstance* pCharacter = pEntity ? pEntity->GetCharacter(0) : NULL; if(pCharacter) { IDefaultSkeleton& rIDefaultSkeleton = pCharacter->GetIDefaultSkeleton(); uint32 id = rIDefaultSkeleton.GetJointIDByName(m_sCharacterBoneName); uint32 numJoints = rIDefaultSkeleton.GetJointCount(); if(numJoints > id) { bonePos = pCharacter->GetISkeletonPose()->GetAbsJointByID(id).t; } } vehiclePos = pEntity ? pEntity->GetWorldTM() * bonePos : Vec3(0,0,0); return vehiclePos; } else { IActor* pActor = CCryAction::GetCryAction()->GetIActorSystem()->GetActor(m_passengerId); CRY_ASSERT(pActor); vehiclePos = pActor->GetLocalEyePos() + m_offset; IEntity* pActorEntity = pActor->GetEntity(); const Matrix34& slotTM = pActorEntity->GetSlotLocalTM(0, false); vehiclePos = pActorEntity->GetLocalTM() * slotTM * vehiclePos; } return m_pVehicle->GetEntity()->GetWorldTM() * vehiclePos; }