private static PosRot GetTrackerWorldPosRot(XRNodeState tracker) { Vector3 pos = new Vector3(); Quaternion rot = new Quaternion(); try { var notes = new List <XRNodeState>(); InputTracking.GetNodeStates(notes); foreach (XRNodeState note in notes) { if (note.uniqueID != tracker.uniqueID) { continue; } if (note.TryGetPosition(out pos) && note.TryGetRotation(out rot)) { var roomCenter = BeatSaberUtil.GetRoomCenter(); var roomRotation = BeatSaberUtil.GetRoomRotation(); pos = roomRotation * pos; pos += roomCenter; rot = roomRotation * rot; } } } catch (Exception e) { Logger.Log(e.Message + "\n" + e.StackTrace, Logger.LogLevel.Error); } return(new PosRot(pos, rot)); }
private static PosRot GetXRNodeWorldPosRot(XRNode node) { var pos = InputTracking.GetLocalPosition(node); var rot = InputTracking.GetLocalRotation(node); var roomCenter = BeatSaberUtil.GetRoomCenter(); var roomRotation = BeatSaberUtil.GetRoomRotation(); pos = roomRotation * pos; pos += roomCenter; rot = roomRotation * rot; return(new PosRot(pos, rot)); }