void CameraController3rd::update(float delta) { //Modificar la distancia al objetivo si conviene checkCameraDistance(); if(_lockOn) { //Shadow mira hacia donde mira la camara TransformComponent * player_trans = EntityManager::get().getComponent<TransformComponent>(World::instance()->getPlayer()); btVector3 cam_front; CameraSystem::get().getPlayerCamera().getFront(cam_front); cam_front.setY(0); player_trans->approximateFront_v(cam_front, 10*delta); //Si hay enemigo fijado, hacer que el player mire hacia el if(_lockedEntity) { btVector3 dir = EntityManager::get().getComponent<TransformComponent>(_lockedEntity)->getPosition() - player_trans->getPosition(); lookTo(dir, 0.8f); //Camara mira hacia la entity fijada } else { lookForEnemies(); if(!CameraSystem::get().isLockedCamera3rd()) rotateCamera(delta); //Rotar camara segun input } } else { if(!CameraSystem::get().isLockedCamera3rd()) rotateCamera(delta); //Rotar camara segun input } //Centrar camara checkCenterCamera(); //Se resitua la camara en una posicion guay btVector3 targetPos = _targetTransform->getOrigin(); targetPos.setY(targetPos.getY() + _upDist); btVector3 left = btVector3(0,1,0).cross(_front); left.normalize(); targetPos = targetPos + _sideDist*left; placeByCollisionsPosition(delta, targetPos); _camera->lookAt( _position, targetPos, btVector3(0,1,0)); }
//------------------------------------------------------------------------ // Purpose : Update Camera //------------------------------------------------------------------------ void Camera::Update(float dt) { static float zoomAngle = 0.0f; if (InputDevice::GetInstance()->KeyDown(DIK_W)) { MoveCam(CAMERA_SPEED * dt); } if (InputDevice::GetInstance()->KeyDown(DIK_S)) { MoveCam(-CAMERA_SPEED * dt); } if (InputDevice::GetInstance()->KeyDown(DIK_A)) { StrafeCam(-CAMERA_SPEED * dt); } if (InputDevice::GetInstance()->KeyDown(DIK_D)) { StrafeCam(CAMERA_SPEED * dt); } if (InputDevice::GetInstance()->MouseButtonDown(1)) // Rotate only { // on Right Click! MouseMovCam(1280,1024); } if (InputDevice::GetInstance()->MouseButtonDown(2)) // Middle Click Zoom In { // Zoom in Interpolation if (m_fov <= D3DX_PI / 8.0f) m_fov = D3DX_PI / 8.0f; else m_fov -= CAMERA_ZOOM_MULTIPLIER * dt; } else { // Zoom out interpolation if (m_fov < D3DX_PI / 2.0f) m_fov += CAMERA_ZOOM_MULTIPLIER * dt; else m_fov = (D3DX_PI / 2.0f); } if (InputDevice::GetInstance()->KeyDown(DIK_F)) { camType = FIRST_PERSON; } if (InputDevice::GetInstance()->KeyDown(DIK_T)) { camType = THIRD_PERSON; } if (InputDevice::GetInstance()->KeyDown(DIK_O)) { camType = ORBIT; } if (InputDevice::GetInstance()->KeyDown(DIK_L)) { D3DXVECTOR3 lookTo(10.0f, 100.0f, -100.f); LookAt(lookTo); } }
void CCamera::lookAt(const CVector3f& fPoint) { //m_v3TargetPos = fPoint; lookTo(fPoint - m_v3Position); }