void CFPSCameraController::Update( float ElapsedTime )
{
	if (m_CameraLocked)
		return;

	m_Pitch = m_Pitch - m_PitchDisplacement;

	AddYaw(CInputManager::GetInputManager()->GetAxis("X_AXIS"));
	AddPitch(CInputManager::GetInputManager()->GetAxis("Y_AXIS"));
	if (m_Pitch > m_PitchfloorLimit)
	{
		m_Pitch = m_PitchfloorLimit;
	}
	if (m_Pitch < m_PitchSkyLimit)
	{
		m_Pitch = m_PitchSkyLimit;
	}

	Mat33f rot;
	rot.SetIdentity();
	rot.RotByAngleX( -m_Pitch );
	rot.RotByAngleY( -m_Yaw );

	Vect3f offsettedPosition = m_TargetPosition;
	offsettedPosition.y += m_CameraOffset.y;


	Vect3f posWithoutCollision = m_TargetPosition + rot * Vect3f(0, 0, m_CameraOffset.z) + Vect3f(0, m_CameraOffset.y, 0);

	Vect3f posWithCollision;

	bool hit = CEngine::GetSingleton().getPhysXManager()->RayCast(offsettedPosition, posWithoutCollision - offsettedPosition, mathUtils::Abs(m_CameraOffset.z), posWithCollision);

	if (hit)
	{
		m_Position = posWithCollision + ( offsettedPosition - posWithCollision ) * 0.05;
	}
	else
	{
		m_Position = posWithoutCollision;
	}
	//m_Position = posWithoutCollision;

	m_Pitch = m_Pitch + m_PitchDisplacement;
}
void CameraControllerBase::HandleInput( const InputData& input )
{
	switch( input.iGICode )
    {
	case GIC_MOUSE_BUTTON_L:
	case GIC_MOUSE_BUTTON_R:
		if( input.iType == ITYPE_KEY_PRESSED )
		{
			switch( input.iGICode )
			{
			case GIC_MOUSE_BUTTON_L: m_IsMouseButtonPressed[MBTN_LEFT]  = 1; break;
			case GIC_MOUSE_BUTTON_R: m_IsMouseButtonPressed[MBTN_RIGHT] = 1; break;
			default: break;
			}
		}
		else if( input.iType == ITYPE_KEY_RELEASED )
		{
			switch( input.iGICode )
			{
			case GIC_MOUSE_BUTTON_L: m_IsMouseButtonPressed[MBTN_LEFT]  = 0; break;
			case GIC_MOUSE_BUTTON_R: m_IsMouseButtonPressed[MBTN_RIGHT] = 0; break;
			default: break;
			}
		}
		break;

	case GIC_MOUSE_AXIS_X:
		if( IsKeyPressed( GIC_MOUSE_BUTTON_R ) )
			AddYaw( input.fParam1 / 500.0f ); // rotation
		else if( IsKeyPressed( GIC_MOUSE_BUTTON_L ) )
			Move( input.fParam1 / 200.0f, 0.0f, 0.0f ); // translation
		break;

	case GIC_MOUSE_AXIS_Y:
		if( IsKeyPressed( GIC_MOUSE_BUTTON_R ) )
			AddPitch( input.fParam1 / 500.0f * (-1.0f) ); // rotation
		else if( IsKeyPressed( GIC_MOUSE_BUTTON_L ) )
			Move( 0.0f, input.fParam1 / 200.0f, 0.0f ); // translation
		break;

	default:
		break;
	}
}
Beispiel #3
0
bool MovingCamera::Update(float elapsedTime)
{
	#pragma region WASD EQ

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
	{
		IncrementPosition(GetForward() * moveSpeed * elapsedTime);
	}
	if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
	{
		IncrementPosition(-GetForward() * moveSpeed * elapsedTime);
	}

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
	{
		IncrementPosition(GetSideways() * moveSpeed * elapsedTime);
	}
	if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
	{
		IncrementPosition(-GetSideways() * moveSpeed * elapsedTime);
	}

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::E))
	{
		IncrementPosition(GetUpward() * -moveSpeed * elapsedTime);
	}
	if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q))
	{
		IncrementPosition(GetUpward() * moveSpeed * elapsedTime);
	}

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
	{
		return true;
	}

	#pragma endregion

	#pragma region Mouse

	if (Window == 0)
	{
		return false;
	}

	if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
	{
        if (!pressedLastFrame)
        {
            Window->setMouseCursorVisible(true);
            pressedLastFrame = true;
            camPaused = !camPaused;
        }
	}
    else pressedLastFrame = false;

    if (camPaused) return false;

	Window->setMouseCursorVisible(false);

	Vector2i mousePos = Conv(sf::Mouse::getPosition());
	Vector2i delta = mousePos - mouseTarget;

	Vector2f rotAmount(delta.x * rotSpeed * elapsedTime, delta.y * rotSpeed * elapsedTime);

	sf::Mouse::setPosition(Conv(mouseTarget));

	AddPitch(-rotAmount.y);
	AddYaw(rotAmount.x);

	#pragma endregion

	return false;
}
Beispiel #4
0
static void r_add_pitch(struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, struct Notes *note, Place *p){
  float notenum = request_notenum(window, "Add pitch", -1);
  if(notenum > 0.0f)
    AddPitch(window, wblock, wtrack, note, p, notenum);
}