tweak head turn return to respect X angles

Head turn would be janky if Y angle reached 0 before X axis reached target angle.
This commit is contained in:
NotAKidoS 2023-03-03 18:44:49 -06:00
parent ff70ae9652
commit 3ebd743227
3 changed files with 8 additions and 4 deletions

View file

@ -93,7 +93,7 @@ public class MainMenuHelper : MonoBehaviour
public void HandleDesktopPosition() public void HandleDesktopPosition()
{ {
if (MSP_MenuInfo.CameraTransform == null || MSP_MenuInfo.DisableMMHelper) return; if (MSP_MenuInfo.CameraTransform == null || MSP_MenuInfo.DisableMMHelper) return;
Transform activeAnchor = MSP_MenuInfo.independentHeadTurn ? worldAnchor : MSP_MenuInfo.CameraTransform; Transform activeAnchor = MSP_MenuInfo.isIndependentHeadTurn ? worldAnchor : MSP_MenuInfo.CameraTransform;
transform.localScale = new Vector3(1.6f * MSP_MenuInfo.ScaleFactor, 0.9f * MSP_MenuInfo.ScaleFactor, 1f); transform.localScale = new Vector3(1.6f * MSP_MenuInfo.ScaleFactor, 0.9f * MSP_MenuInfo.ScaleFactor, 1f);
transform.position = activeAnchor.position + activeAnchor.forward * 1f * MSP_MenuInfo.ScaleFactor * MSP_MenuInfo.AspectRatio; transform.position = activeAnchor.position + activeAnchor.forward * 1f * MSP_MenuInfo.ScaleFactor * MSP_MenuInfo.AspectRatio;
transform.rotation = activeAnchor.rotation; transform.rotation = activeAnchor.rotation;

View file

@ -75,7 +75,7 @@ public class QuickMenuHelper : MonoBehaviour
{ {
if (MSP_MenuInfo.CameraTransform == null || MSP_MenuInfo.DisableQMHelper) return; if (MSP_MenuInfo.CameraTransform == null || MSP_MenuInfo.DisableQMHelper) return;
Transform activeAnchor = MSP_MenuInfo.independentHeadTurn ? worldAnchor : MSP_MenuInfo.CameraTransform; Transform activeAnchor = MSP_MenuInfo.isIndependentHeadTurn ? worldAnchor : MSP_MenuInfo.CameraTransform;
transform.localScale = new Vector3(1f * MSP_MenuInfo.ScaleFactor, 1f * MSP_MenuInfo.ScaleFactor, 1f); transform.localScale = new Vector3(1f * MSP_MenuInfo.ScaleFactor, 1f * MSP_MenuInfo.ScaleFactor, 1f);
transform.rotation = activeAnchor.rotation; transform.rotation = activeAnchor.rotation;
transform.position = activeAnchor.position + activeAnchor.transform.forward * 1f * MSP_MenuInfo.ScaleFactor; transform.position = activeAnchor.position + activeAnchor.transform.forward * 1f * MSP_MenuInfo.ScaleFactor;

View file

@ -28,7 +28,9 @@ public class MSP_MenuInfo
//reflection //reflection
internal static readonly FieldInfo _desktopMouseModeQM = typeof(ViewManager).GetField("_desktopMouseMode", BindingFlags.NonPublic | BindingFlags.Instance); internal static readonly FieldInfo _desktopMouseModeQM = typeof(ViewManager).GetField("_desktopMouseMode", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo _desktopMouseModeMM = typeof(CVR_MenuManager).GetField("_desktopMouseMode", BindingFlags.NonPublic | BindingFlags.Instance); internal static readonly FieldInfo _desktopMouseModeMM = typeof(CVR_MenuManager).GetField("_desktopMouseMode", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo ms_followAngleX = typeof(MovementSystem).GetField("_followAngleX", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo ms_followAngleY = typeof(MovementSystem).GetField("_followAngleY", BindingFlags.NonPublic | BindingFlags.Instance); internal static readonly FieldInfo ms_followAngleY = typeof(MovementSystem).GetField("_followAngleY", BindingFlags.NonPublic | BindingFlags.Instance);
internal static readonly FieldInfo ms_manualAngleX = typeof(MovementSystem).GetField("_manualAngleX", BindingFlags.NonPublic | BindingFlags.Instance);
internal static bool isIndependentHeadTurn = false; internal static bool isIndependentHeadTurn = false;
@ -57,8 +59,10 @@ public class MSP_MenuInfo
} }
else if (!isPressed && isIndependentHeadTurn) else if (!isPressed && isIndependentHeadTurn)
{ {
float angle = (float)ms_followAngleY.GetValue(MovementSystem.Instance); float angleX = (float)ms_followAngleX.GetValue(MovementSystem.Instance);
if (angle == 0f) float angleY = (float)ms_followAngleY.GetValue(MovementSystem.Instance);
float manualAngleX = (float)ms_manualAngleX.GetValue(MovementSystem.Instance);
if (angleY == 0f && angleX == manualAngleX)
{ {
isIndependentHeadTurn = false; isIndependentHeadTurn = false;
MSP_MenuInfo.ToggleDesktopInputMethod(true); MSP_MenuInfo.ToggleDesktopInputMethod(true);