mirror of
https://github.com/NotAKidoS/NAK_CVR_Mods.git
synced 2025-09-02 14:29:25 +00:00
InteractionTest: idk never committed this
This commit is contained in:
parent
fd4fe2ea9d
commit
1ed32799a8
1 changed files with 44 additions and 18 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue