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));
}
예제 #2
0
파일: Camera.cpp 프로젝트: TheOrestes/D3D9
//------------------------------------------------------------------------
// 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);
	}
}
예제 #3
0
void CCamera::lookAt(const CVector3f& fPoint)
{
	//m_v3TargetPos = fPoint;
	lookTo(fPoint - m_v3Position);
}