1using NaughtyAttributes;
2using System.Collections;
3using System.Collections.Generic;
6using static Valve.VR.InteractionSystem.Hand;
12 internal bool releaseFingers =
false;
18 private List<Queue<Vector3>> fromQueue, thumbQueue;
19 private List<Vector3> handPosQueue, handRotQueue;
20 internal float time = 0.0f;
21 internal List<GameObject> SavedCollidedFingers =
new List<GameObject>();
23 private Vector3 lastPosition;
24 internal bool isCollision =
false;
25 private Vector3 OriginalHandPosition;
26 private Vector3 OriginalHandRotation;
27 private Quaternion OriginalHandRot;
28 private Vector3 PrevHandRotation;
34 fromQueue =
new List<Queue<Vector3>>();
35 thumbQueue =
new List<Queue<Vector3>>();
36 handPosQueue =
new List<Vector3>();
37 handRotQueue =
new List<Vector3>();
38 for (
int i = 0; i < @
from.Length; i++)
40 fromQueue.Add(
new Queue<Vector3>());
42 for (
int i = 0; i <
thumb1.Length; i++)
44 thumbQueue.Add(
new Queue<Vector3>());
47 OriginalHandPosition = gameObject.transform.localPosition;
48 OriginalHandRotation = gameObject.transform.localEulerAngles;
49 OriginalHandRot = gameObject.transform.localRotation;
58 var delta = Vector3.Distance(transform.localPosition,
OriginalTransform.localPosition);
62 GetComponent<PhysicsHand>().MoveTo(OriginalHandPosition,
OriginalTransform.rotation);
64 if (GetComponentInParent<HackedHand>().attachedToHand)
66 transform.localPosition = OriginalHandPosition;
67 transform.localEulerAngles = OriginalHandRotation;
76 if (GetComponentInChildren<ThrowableCanDisable>() && !GetComponentInChildren<ThrowableCanDisable>().attachmentFlags.HasFlag(AttachmentFlags.SnapOnAttach) && !
ToolPositioner.
instance.
IsTool(GetComponentInChildren<ThrowableCanDisable>().gameObject))
return;
77 for (
int i = 0; i < @
from.Length; i++)
83 : @
from[i].transform.localEulerAngles.z,
86 : -@
from[i].transform.localEulerAngles.x));
88 while (fromQueue[i].Count >
AvgClamp)
90 fromQueue[i].Dequeue();
164 var fingers = GetComponentsInChildren<FingerCollisionDetection>();
165 foreach (var finger
in fingers)
167 if (finger.raycastFinger() && !SavedCollidedFingers.Contains(finger.gameObject))
169 SavedCollidedFingers.Add(finger.gameObject);
170 SavedCollidedFingers.Add(finger.gameObject.transform.parent.gameObject);
171 SavedCollidedFingers.Add(finger.gameObject.transform.parent.transform.parent.gameObject);
172 if (finger.name.Contains(
"Bone005")) SavedCollidedFingers.Add(finger.gameObject.transform.parent.transform.parent.transform.parent.gameObject);
175 if (finger.name.Contains(
"Bone005") && !SavedCollidedFingers.Contains(finger.gameObject))
177 SavedCollidedFingers.Add(finger.gameObject);
178 SavedCollidedFingers.Add(finger.gameObject.transform.parent.gameObject);
179 SavedCollidedFingers.Add(finger.gameObject.transform.parent.transform.parent.gameObject);
180 SavedCollidedFingers.Add(finger.gameObject.transform.parent.transform.parent.transform.parent.gameObject);
191 if (!GetComponentInParent<HackedHand>().attachedToHand)
193 SavedCollidedFingers.Clear();
195 for (
int i = 0; i < @
from.Length; i++)
197 var avg =
default(Vector3);
198 foreach (var v
in fromQueue[i])
203 avg /= fromQueue[i].Count;
206 to[i].transform.localEulerAngles = avg;
208 if (!GetComponentInParent<HackedHand>().attachedToHand)
210 var le0 =
thumb1[0].transform.localEulerAngles;
212 for (
int i = 1; i <
thumb1.Length; i++)
214 var le =
thumb1[i].transform.localEulerAngles;
223 releaseFingers =
false;
228 time += Time.deltaTime;
229 if (time >= 1.0f) releaseFingers =
true;
232 if (!GetComponentInParent<HackedHand>().handAnim)
234 CopyColliderPosition();
240 void CopyColliderPosition()
242 var capsule = GetComponents<CapsuleCollider>();
243 if (capsule ==
null)
return;
244 if (
to ==
null)
return;
248 capsule[0].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[2].transform.position.x,
to[2].transform.position.y+0.01f,
to[2].transform.position.z));
249 capsule[1].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[2].transform.position.x,
to[2].transform.position.y-0.01f,
to[2].transform.position.z));
250 capsule[2].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[5].transform.position.x,
to[5].transform.position.y+0.01f,
to[5].transform.position.z));
251 capsule[3].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[5].transform.position.x,
to[5].transform.position.y-0.01f,
to[5].transform.position.z));
252 capsule[4].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[8].transform.position.x,
to[8].transform.position.y+0.01f,
to[8].transform.position.z));
253 capsule[5].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[8].transform.position.x,
to[8].transform.position.y-0.01f,
to[8].transform.position.z));
254 capsule[6].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[11].transform.position.x,
to[11].transform.position.y+0.01f,
to[11].transform.position.z));
255 capsule[7].center = gameObject.transform.InverseTransformPoint(
new Vector3(
to[11].transform.position.x,
to[11].transform.position.y-0.01f,
to[11].transform.position.z));
256 capsule[8].center = gameObject.transform.InverseTransformPoint(
thumb2[2].transform.position);
257 capsule[9].center = gameObject.transform.InverseTransformPoint(
thumb2[2].transform.GetChild(0).position);
259 capsule[10].center = gameObject.transform.InverseTransformPoint(
to[1].transform.position);
260 capsule[11].center = gameObject.transform.InverseTransformPoint(
to[4].transform.position);
261 capsule[12].center = gameObject.transform.InverseTransformPoint(
to[7].transform.position);
262 capsule[13].center = gameObject.transform.InverseTransformPoint(
to[10].transform.position);
265 internal float speedometer()
267 speed = (transform.position - lastPosition).magnitude;
268 lastPosition = transform.position;
271 private void OnCollisionEnter(Collision collision)
279 private void OnCollisionExit(Collision collision)
302 return releaseFingers;
UnityEngine.UI.Button Button
Transform OriginalTransform
static Vector3 ClampAngle(Vector3 value)