/// <summary> /// Prompt the AlignmentManager to compute a new alignment pose, then apply it to the target subtree. /// </summary> private void Update() { Debug.Assert(alignmentManager != null); CheckAutoLoad(); var wltMgr = WorldLockingManager.GetInstance(); Debug.Assert(alignmentManager != wltMgr.AlignmentManager); Pose lockedHeadPose = wltMgr.LockedFromPlayspace.Multiply(wltMgr.PlayspaceFromSpongy.Multiply(wltMgr.SpongyFromCamera)); alignmentManager.ComputePinnedPose(lockedHeadPose); var pinnedFromLocked = alignmentManager.PinnedFromLocked; var lockedFromPinned = pinnedFromLocked.Inverse(); if (wltMgr.ApplyAdjustment) { subTree.SetGlobalPose(lockedFromPinned); } else { var spongyFromLocked = wltMgr.SpongyFromLocked; var pinnedFromFrozen = wltMgr.PinnedFromFrozen; var spongyFromFrozen = spongyFromLocked.Multiply(lockedFromPinned).Multiply(pinnedFromFrozen); subTree.SetGlobalPose(spongyFromFrozen); } CheckAutoSave(); }
/// <summary> /// Prompt the AlignmentManager to compute a new alignment pose, then apply it to the target subtree. /// </summary> private void Update() { Debug.Assert(alignmentManager != null); CheckLoad(); var wltMgr = WorldLockingManager.GetInstance(); Debug.Assert(alignmentManager != wltMgr.AlignmentManager); Pose lockedHeadPose = wltMgr.LockedFromPlayspace.Multiply(wltMgr.PlayspaceFromSpongy.Multiply(wltMgr.SpongyFromCamera)); alignmentManager.ComputePinnedPose(lockedHeadPose); var pinnedFromLocked = alignmentManager.PinnedFromLocked; var lockedFromPinned = pinnedFromLocked.Inverse(); subTree.SetGlobalPose(lockedFromPinned); }