Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }