5 using System.Collections.Generic;
8 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 12 namespace HoloToolkit.Unity.InputModule.Examples.Grabbables
23 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 24 public InteractionSourceHandedness
Handedness {
get {
return handedness; }
set { handedness = value; } }
27 public List<BaseGrabbable> GrabbedObjects {
get {
return new List<BaseGrabbable>(grabbedObjects); } }
34 if (grabbedObjects.Count > 1)
47 if (contactObjects.Count > 1)
49 else if (contactObjects.Count > 0)
59 public Transform GrabHandle
63 return grabAttachSpot != null ? grabAttachSpot : transform;
67 public float Strength {
get {
return strength; } }
73 protected float strength = 1.0f;
75 protected HashSet<BaseGrabbable> grabbedObjects =
new HashSet<BaseGrabbable>();
76 protected List<BaseGrabbable> contactObjects =
new List<BaseGrabbable>();
83 #if UNITY_WSA && UNITY_2017_2_OR_NEWER 85 protected InteractionSourceHandedness handedness;
90 return grabbedObjects.Contains(grabbable);
102 Debug.Log(
"Transferring ownership of " + ownerGrab.name +
" to grabber " + otherGrabber.name);
103 grabbedObjects.Remove(ownerGrab);
113 for (
int i = contactObjects.Count - 1; i >= 0; i--)
115 if ((contactObjects[i] == null || !contactObjects[i].isActiveAndEnabled) && !grabbedObjects.Contains(contactObjects[i]))
117 contactObjects.RemoveAt(i);
122 if (contactObjects.Count > 0)
129 grabbedObjects.Add(contactObjects[0]);
140 grabbedObjects.Clear();
149 grabbedObjects.Clear();
158 if (!contactObjects.Contains(availableObject))
160 contactObjects.Add(availableObject);
172 contactObjects.Remove(availableObject);
175 if (contactObjects.Contains(availableObject))
188 return Vector3.Distance(b1.
GrabPoint, GrabHandle.position).CompareTo(Vector3.Distance(b2.
GrabPoint, GrabHandle.position));
195 if (
UnityEditor.Selection.activeGameObject == gameObject)
197 if (Input.GetKeyDown(KeyCode.G))
201 Debug.Log(
"Grab start");
206 Debug.Log(
"Grab end");
213 if (prevGrabState != GrabState && OnGrabStateChange != null)
215 Debug.Log(
"Calling on grab change in grabber");
216 OnGrabStateChange(
this);
219 if (prevContactState != ContactState && OnContactStateChange != null)
221 Debug.Log(
"Calling on contact change in grabber");
222 OnContactStateChange(
this);
225 prevGrabState = GrabState;
226 prevContactState = ContactState;