diff --git a/Assets/Scripts/Input.cs b/Assets/Scripts/Input.cs index da0a5fe..ec3d91b 100644 --- a/Assets/Scripts/Input.cs +++ b/Assets/Scripts/Input.cs @@ -17,7 +17,8 @@ public class Input public Vector3 twistCursor; Vector3 mainCalibDir; - float calibDist; + Quaternion mainCalibRot; + float calibDist, calibZ; public void Frame() { oculusInject.Frame(this); @@ -28,8 +29,13 @@ public class Input rig.position = -head.localPosition; // that zeros us out for an offset rig.position += head.localRotation * Vector3.back * 0.666f; - mainCalibDir = Vector3.zero - WorldPos(mainCon).normalized; // Vector3.zero == center? + mainCalibDir = Vector3.zero - WorldPos(mainCon).normalized; + mainCalibRot = mainCon.physical.Rot(); calibDist = Vector3.Distance(Vector3.zero, WorldPos(mainCon)); + calibZ = Vector3.Angle( + offCon.physical.Rot() * Vector3.up, + WorldPos(mainCon) - WorldPos(offCon) + ) / 90f; } float zValue = Vector3.Angle( @@ -37,7 +43,10 @@ public class Input WorldPos(mainCon) - WorldPos(offCon) ) / 90f; // 0in - 1neutral - 2out - twistCursor = WorldPos(mainCon) + mainCon.physical.Rot() * mainCalibDir * calibDist * zValue; + zValue = 1 + zValue - calibZ; + + Quaternion rot = mainCon.physical.Rot() * Quaternion.Inverse(mainCalibRot); + twistCursor = WorldPos(mainCon) + rot * mainCalibDir * calibDist * zValue; } public Vector3 WorldPos(Con con)