public void Grabbed(GrabbableBase toGrab) { if (!toGrab.Interactable) { return; } if (GrabbedInteractablesTable.Contains(toGrab)) { return; } if (!toGrab.GrabFlags.HasFlag(EGrabFlags.AllowGrabFromHand)) { if (toGrab.Grabber != null) { return; } } if (toGrab.GrabFlags.HasFlag(EGrabFlags.UnGrabOthers)) { for (var i = GrabbedInteractables.Count - 1; i >= 0; i--) { var grabbable = GrabbedInteractables[i]; if (ReferenceEquals(grabbable, toGrab)) { continue; } UnGrabbed(grabbable); } } toGrab.Grabber = this; toGrab.Grabbed(this); GrabbedInteractables.Add(toGrab); GrabbedInteractablesTable.Add(toGrab); if (toGrab.GrabFlags.HasFlag(EGrabFlags.HideControllers)) { foreach (var model in Models) { model.gameObject.SetActive(false); } } }
public void UnGrabbed(GrabbableBase interactable) { interactable.UnGrabbed(this); interactable.Grabber = null; GrabbedInteractables.Remove(interactable); GrabbedInteractablesTable.Remove(interactable); if (interactable.GrabFlags.HasFlag(EGrabFlags.HideControllers)) { foreach (var model in Models) { model.gameObject.SetActive(true); } } }