InteractionTest: idk never committed this

This commit is contained in:
NotAKidoS 2024-09-06 01:19:35 -05:00
parent fd4fe2ea9d
commit 1ed32799a8

View file

@ -30,7 +30,10 @@ public class InteractionTracker : MonoBehaviour
sphereCol.isTrigger = true; sphereCol.isTrigger = true;
BetterBetterCharacterController.QueueRemovePlayerCollision(sphereCol); BetterBetterCharacterController.QueueRemovePlayerCollision(sphereCol);
trackerObject.AddComponent<InteractionTracker>().isLeft = isLeft;
InteractionTracker tracker = trackerObject.AddComponent<InteractionTracker>();
tracker.isLeft = isLeft;
tracker.Initialize();
} }
#endregion Setup #endregion Setup
@ -57,7 +60,7 @@ public class InteractionTracker : MonoBehaviour
#region Unity Events #region Unity Events
private void Awake() private void Initialize()
{ {
_selfCollider = GetComponent<Collider>(); _selfCollider = GetComponent<Collider>();
CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(OnLocalAvatarLoaded); CVRGameEventSystem.Avatar.OnLocalAvatarLoad.AddListener(OnLocalAvatarLoaded);
@ -76,6 +79,8 @@ public class InteractionTracker : MonoBehaviour
private IEnumerator FrameLateInit() private IEnumerator FrameLateInit()
{ {
yield return null; yield return null;
yield return null;
OnInitSolver();
IKSystem.vrik.onPreSolverUpdate.AddListener(OnPreSolverUpdate); IKSystem.vrik.onPreSolverUpdate.AddListener(OnPreSolverUpdate);
IKSystem.vrik.onPostSolverUpdate.AddListener(OnPostSolverUpdate); IKSystem.vrik.onPostSolverUpdate.AddListener(OnPostSolverUpdate);
} }
@ -154,21 +159,44 @@ public class InteractionTracker : MonoBehaviour
private Transform _oldTarget; private Transform _oldTarget;
private Vector3 _initialPosOffset;
private Quaternion _initialRotOffset;
private IKSolverVR.Arm _armSolver;
private void OnInitSolver()
{
_armSolver = isLeft ? IKSystem.vrik.solver.arms[0] : IKSystem.vrik.solver.arms[1];
Transform target = _armSolver.target;
if (target == null)
target = transform.parent.Find("RotationTarget"); // LeapMotion: RotationTarget
if (target == null) return;
_initialPosOffset = target.localPosition;
_initialRotOffset = target.localRotation;
}
private void OnPreSolverUpdate() private void OnPreSolverUpdate()
{ {
if (!IsColliding) return; if (!IsColliding)
return;
var solverArms = IKSystem.vrik.solver.arms; Transform selfTransform = transform;
IKSolverVR.Arm arm = isLeft ? solverArms[0] : solverArms[1];
_oldTarget = arm.target; float dot = Vector3.Dot(_lastPenetrationNormal, selfTransform.forward);
arm.target = transform.GetChild(0); if (dot > -0.45f)
return;
arm.target.position = ClosestPoint; _oldTarget = _armSolver.target;
arm.target.rotation = Quaternion.LookRotation(_lastPenetrationNormal, _oldTarget.rotation * Vector3.up); _armSolver.target = selfTransform.GetChild(0);
arm.positionWeight = 1f; _armSolver.target.position = ClosestPoint + selfTransform.rotation * _initialPosOffset;
arm.rotationWeight = 1f; _armSolver.target.rotation = _initialRotOffset * Quaternion.LookRotation(-_lastPenetrationNormal, selfTransform.up);
_armSolver.positionWeight = 1f;
_armSolver.rotationWeight = 1f;
} }
private void OnPostSolverUpdate() private void OnPostSolverUpdate()
@ -176,12 +204,10 @@ public class InteractionTracker : MonoBehaviour
if (!_oldTarget) if (!_oldTarget)
return; return;
var solverArms = IKSystem.vrik.solver.arms; _armSolver.target = _oldTarget;
IKSolverVR.Arm arm = isLeft ? solverArms[0] : solverArms[1];
arm.target = _oldTarget;
_oldTarget = null; _oldTarget = null;
arm.positionWeight = 0f; _armSolver.positionWeight = 0f;
arm.rotationWeight = 0f; _armSolver.rotationWeight = 0f;
} }
} }