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; } }
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; }