Tanoda
TwoHandGrab.cs
Go to the documentation of this file.
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4#if !UNITY_WEBGL
5using Valve.VR.InteractionSystem;
6#endif
7#if DANA
8using Leap.Unity.Infix;
9#endif
10
11public class TwoHandGrab : MonoBehaviour
12{
13 private GameObject attachedGameObject, helperGO, leftHand, rightHand;
14 private Vector3 rightHandPos, leftHandPos;
15 private OffsetHolder offsetHolder;
16 private Transform OriginalParent;
17 internal bool isRunning = false;
18 internal bool stop = true;
19 internal HandCopySkelet[] hands;
20 // Start is called before the first frame update
21 void Start()
22 {
23 hands = FindObjectsOfType<HandCopySkelet>();
24 }
25
26 // Update is called once per frame
27 void Update()
28 {
29#if DANA
30 if (Player.instance == null) return;
31
32 var playerHands = Player.instance.hands;
33
34 if (playerHands != null)
35 {
36
37 if (gameObject != null)
38 {
39 offsetHolder = gameObject.GetComponentInParent<OffsetHolder>();
40 }
41
42 rightHandPos = playerHands[3].GetComponentInChildren<HandCopyLeap>().transform.position;
43 leftHandPos = playerHands[2].GetComponentInChildren<HandCopyLeap>().transform.position;
44 leftHand = playerHands[2].GetComponentInChildren<HandCopyLeap>().gameObject;
45 rightHand = playerHands[3].GetComponentInChildren<HandCopyLeap>().gameObject;
46 var rightHandname = playerHands[3].name;
47 var leftHandname = playerHands[2].name;
48
49
50 var worldLeftPos = offsetHolder.transform.TransformPoint(offsetHolder.LeftOffset);
51 var worldPos = offsetHolder.transform.TransformPoint(offsetHolder.Offset);
52 var distanceLeft = Vector3.Distance(offsetHolder.transform.TransformPoint(offsetHolder.LeftOffset), leftHandPos);
53 var distanceRight = Vector3.Distance(offsetHolder.transform.TransformPoint(offsetHolder.Offset), rightHandPos);
54 //if ((Vector3.Distance(offsetHolder.transform.TransformPoint(offsetHolder.LeftOffset), leftHandPos) < 0.1f) &&
55 // (Vector3.Distance(offsetHolder.transform.TransformPoint(offsetHolder.Offset), rightHandPos) < 0.1f) && !isRunning)
56 //{
57 // StartCoroutine(GrabTheObject(offsetHolder));
58 //}
59 //if (hands[0].isCollision && hands[1].isCollision && !isRunning)
60 //{
61 // //StartCoroutine(GrabTheObject(offsetHolder));
62 //}
63
64 }
65#endif
66
67 }
68
69 public void detachGO()
70 {
71 attachedGameObject.transform.SetParent(OriginalParent, true);
72 Destroy(helperGO);
73 StopAllCoroutines();
74 isRunning = false;
75 }
76 IEnumerator GrabTheObject(OffsetHolder tcd)
77 {
78 if (helperGO != null)
79 {
80 Destroy(helperGO);
81 }
82
83 GameObject helper = new GameObject();
84 helperGO = helper;
85 attachedGameObject = tcd.gameObject;
86 OriginalParent = tcd.transform.parent;
87 helper.transform.SetParent(tcd.transform, true);
88 //helper.transform.position = tcd.transform.position;
89 helper.transform.localPosition = Vector3.zero;
90 helper.transform.localEulerAngles = Vector3.zero;
91 bool alreadyInGO = false;
92 Vector3 subtraction = new Vector3();
93 var size = tcd.GetComponentInChildren<MeshRenderer>().bounds.size;
94 stop = true;
95 //GameObject teszt = new GameObject();
96
97 while (stop)
98 {
99 isRunning = true;
100 if ((Vector3.Distance(tcd.transform.TransformPoint(tcd.LeftOffset), leftHandPos) < 0.15f) && (Vector3.Distance(tcd.transform.TransformPoint(tcd.Offset), rightHandPos) < 0.15f))
101 {
102 var middlePoint = ((leftHandPos + rightHandPos) / 2);
103
104 //helper.transform.forward = rightHandPos - leftHandPos;
105 if (!alreadyInGO)
106 {
107 alreadyInGO = true;
108 helper.transform.position = middlePoint;
109 helper.transform.LookAt(rightHandPos, Vector3.ProjectOnPlane(rightHand.transform.right, -helper.transform.forward));
110 helper.transform.SetParent(OriginalParent, true);
111 yield return null;
112 helper.transform.localScale = Vector3.one;
113
114 tcd.transform.SetParent(helper.transform, true);
115 yield return null;
116 subtraction = middlePoint - tcd.transform.position;
117 }
118 helper.transform.LookAt(rightHandPos, Vector3.ProjectOnPlane(rightHand.transform.right, -helper.transform.forward));
119
120 helper.transform.localPosition = middlePoint;
121 }
122 yield return null;
123 }
124 }
125}
Vector3 Offset
Definition: OffsetHolder.cs:7
Vector3 LeftOffset
Definition: OffsetHolder.cs:9
void detachGO()
Definition: TwoHandGrab.cs:69