diff --git a/enginecustom/Positionclass.cpp b/enginecustom/Positionclass.cpp index 77dd69e..abe8d1d 100644 --- a/enginecustom/Positionclass.cpp +++ b/enginecustom/Positionclass.cpp @@ -4,6 +4,7 @@ PositionClass::PositionClass() { m_frameTime = 0.0f; m_rotationY = 0.0f; + m_rotationX = 0.0f; m_leftTurnSpeed = 0.0f; m_rightTurnSpeed = 0.0f; } @@ -24,9 +25,10 @@ void PositionClass::SetFrameTime(float time) return; } -void PositionClass::GetRotation(float& y) +void PositionClass::GetRotation(float& y, float& x) { y = m_rotationY; + x = m_rotationX; return; } @@ -92,5 +94,38 @@ void PositionClass::TurnRight(bool keydown) m_rotationY -= 360.0f; } + return; +} + +void PositionClass::TurnMouse(float deltaX, float deltaY) +{ + // The turning speed is proportional to the horizontal mouse movement + m_horizontalTurnSpeed = deltaX * 0.1f; + + // Update the rotation using the turning speed + m_rotationY += m_horizontalTurnSpeed; + if (m_rotationY < 0.0f) + { + m_rotationY += 360.0f; + } + else if (m_rotationY > 360.0f) + { + m_rotationY -= 360.0f; + } + + // The turning speed is proportional to the vertical mouse movement + m_verticalTurnSpeed = deltaY * 0.1f; + + // Update the rotation using the turning speed + m_rotationX += m_verticalTurnSpeed; + if (m_rotationX < -90.0f) + { + m_rotationX = -90.0f; + } + else if (m_rotationX > 90.0f) + { + m_rotationX = 90.0f; + } + return; } \ No newline at end of file diff --git a/enginecustom/Positionclass.h b/enginecustom/Positionclass.h index 7ba78e8..a57799a 100644 --- a/enginecustom/Positionclass.h +++ b/enginecustom/Positionclass.h @@ -19,15 +19,16 @@ public: ~PositionClass(); void SetFrameTime(float); - void GetRotation(float&); + void GetRotation(float&, float&); void TurnLeft(bool); void TurnRight(bool); + void TurnMouse(float, float); private: float m_frameTime; - float m_rotationY; - float m_leftTurnSpeed, m_rightTurnSpeed; + float m_rotationY, m_rotationX; + float m_leftTurnSpeed, m_rightTurnSpeed, m_horizontalTurnSpeed, m_verticalTurnSpeed; }; #endif \ No newline at end of file diff --git a/enginecustom/applicationclass.cpp b/enginecustom/applicationclass.cpp index f94cb59..220a7c1 100644 --- a/enginecustom/applicationclass.cpp +++ b/enginecustom/applicationclass.cpp @@ -572,11 +572,14 @@ void ApplicationClass::Shutdown() bool ApplicationClass::Frame(InputClass* Input) { - int mouseX, mouseY; + int mouseX, mouseY, currentMouseX, currentMouseY; bool result, mouseDown, keyDown; - float rotationY; + float rotationY, rotationX; float frameTime; + + static int lastMouseX = 0, lastMouseY = 0; + static float rotation = 360.0f; static float x = 6.f; static float y = 3.f; @@ -594,6 +597,19 @@ bool ApplicationClass::Frame(InputClass* Input) return false; } + // Get the location of the mouse from the input object, + Input->GetMouseLocation(mouseX, mouseY); + + currentMouseX = mouseX; + + float deltaX = currentMouseX - lastMouseX; // Calculez le déplacement de la souris + lastMouseX = currentMouseX; // Mettez à jour la dernière position de la souris pour la prochaine image + + currentMouseY = mouseY; + + float deltaY = currentMouseY - lastMouseY; // Calculez le déplacement de la souris + lastMouseY = currentMouseY; // Mettez à jour la dernière position de la souris pour la prochaine image + // Set the frame time for calculating the updated position. m_Position->SetFrameTime(m_Timer->GetTime()); @@ -604,11 +620,13 @@ bool ApplicationClass::Frame(InputClass* Input) keyDown = Input->IsRightArrowPressed(); m_Position->TurnRight(keyDown); + m_Position->TurnMouse(deltaX, deltaY); + // Get the current view point rotation. - m_Position->GetRotation(rotationY); + m_Position->GetRotation(rotationY, rotationX); // Set the rotation of the camera. - m_Camera->SetRotation(0.0f, rotationY, 0.0f); + m_Camera->SetRotation(rotationX, rotationY, 0.0f); m_Camera->Render(); // Render the graphics scene. @@ -648,9 +666,6 @@ bool ApplicationClass::Frame(InputClass* Input) return false; } - // Get the location of the mouse from the input object, - Input->GetMouseLocation(mouseX, mouseY); - // Check if the mouse has been pressed. mouseDown = Input->IsMousePressed(); @@ -661,25 +676,6 @@ bool ApplicationClass::Frame(InputClass* Input) return false; } - //// Obtenez la position de la souris - //Input->GetMouseLocation(mouseX, mouseY); - - //// Calculez la distance parcourue par la souris depuis le dernier frame - //float deltaX = mouseX - m_previousMouseX; - //float deltaY = mouseY - m_previousMouseY; - - //// Mettez à jour les positions précédentes de la souris - //m_previousMouseX = mouseX; - //m_previousMouseY = mouseY; - - //// Utilisez deltaX et deltaY pour ajuster la rotation de la caméra - //float rotationSpeed = 0.1f; // Ajustez cette valeur pour changer la vitesse de rotation - //float rotationX = m_Camera->GetRotation().x + deltaY * rotationSpeed; - //float rotationY = m_Camera->GetRotation().y + deltaX * rotationSpeed; - - //// Mettez à jour la rotation de la caméra - //m_Camera->SetRotation(rotationX, rotationY, 0.0f); - // Update the sprite object using the frame time. m_Sprite->Update(frameTime); diff --git a/enginecustom/applicationclass.h b/enginecustom/applicationclass.h index 9d45353..c8cacbb 100644 --- a/enginecustom/applicationclass.h +++ b/enginecustom/applicationclass.h @@ -87,8 +87,6 @@ private: PositionClass* m_Position; FrustumClass* m_Frustum; XMMATRIX m_baseViewMatrix; - float m_previousMouseX; - float m_previousMouseY; }; #endif