Hi. I would like to make the rotation of the gun at -45 and +45 (or less) degrees relative to that of the camera. When I limit the values, it only works according to the world coordinate. For example, when I turn a full turn to the left, I have to turn a full turn right again so that the gun rotates in the right direction. I want to do a gun control like Insurgency game. How can I fix this? Here is my code.
float currentTime = Time::GetCurrent();
Vec2 currentMousePos = Window::GetCurrent()->GetMousePosition();
Window::GetCurrent()->SetMousePosition(Math::Round(Context::GetCurrent()->GetWidth() / 2), Math::Round(Context::GetCurrent()->GetHeight() / 2));
Vec2 centerPos = Window::GetCurrent()->GetMousePosition();
currentMousePos.x = Math::Round(currentMousePos.x);
currentMousePos.y = Math::Round(currentMousePos.y);
mouseDifference.x = Math::Curve(currentMousePos.x - centerPos.x, mouseDifference.x, 2 / Time::GetSpeed());
mouseDifference.y = Math::Curve(currentMousePos.y - centerPos.y, mouseDifference.y, 2 / Time::GetSpeed());
camRotation.x = Math::Clamp(camRotation.x + mouseDifference.y / mouseSensitivity, -90, 90);
camRotation.y = camRotation.y + (mouseDifference.x / mouseSensitivity);
hurtOffset.x = Math::Inc(0, hurtOffset.x, 2 * Time::GetSpeed());
hurtOffset.y = Math::Inc(0, hurtOffset.y, 2 * Time::GetSpeed());
smoothedHurtOffset.x = Math::Curve(hurtOffset.x, smoothedHurtOffset.x, 3);
smoothedHurtOffset.y = Math::Curve(hurtOffset.y, smoothedHurtOffset.y, 3);
bobOffset.x = Math::Inc(0, bobOffset.x, Time::GetSpeed() * 0.8f);
bobOffset.y = Math::Inc(0, bobOffset.y, Time::GetSpeed());
smoothedBobOffset.x = Math::Curve(bobOffset.x, smoothedBobOffset.x, 25);
smoothedBobOffset.y = Math::Curve(bobOffset.y, smoothedBobOffset.y, 25);
weaponViewRot.x = Math::Clamp(camRotation.x + mouseDifference.y / mouseSensitivity, -45, 45);
weaponViewRot.y = Math::Clamp(camRotation.y + mouseDifference.x / mouseSensitivity, -45, 45);
smoothWeaponViewRot.x = Math::Curve(weaponViewRot.x, smoothedHurtOffset.x, 5);
smoothWeaponViewRot.y = Math::Curve(weaponViewRot.y, smoothedHurtOffset.x, 5);
playerCamera->SetRotation(camRotation + smoothedBobOffset + smoothedHurtOffset);
testWeapon->entity->SetRotation(camRotation + smoothWeaponViewRot);
if (Window::GetCurrent()->MouseDown(1)) {
testWeapon->weaponShoot();
}