예제 #1
0
        private void OnGrabbableUpdated(Grabbable.Update update)
        {
            if (!update.currentGrabberInfo.HasValue)
            {
                return;
            }

            var            previousGrabberEntityId       = grabberEntityId;
            ControllerSide previousGrabberControllerSide = grabberControllerSide;

            UpdateLocalCurrentGrabberInfo(update.currentGrabberInfo.Value);

            if (grabberEntityId != previousGrabberEntityId ||
                grabberControllerSide != previousGrabberControllerSide)
            {
                // Current grabber has changed or side
                if (previousGrabberEntityId.HasValue)
                {
                    // Notify the previous grabber entity it no longer holds the item
                    GameObject     previousControllerGameObject = LocalEntities.Instance.Get(previousGrabberEntityId.Value).UnderlyingGameObject;
                    GrabbingSender grabbingSender = previousControllerGameObject.GetComponent <GrabbingSender>();

                    // GrabbingSender will be disabled on workers not authoritative over dropped object's Grabbable
                    if (grabbingSender != null && grabbingSender.isActiveAndEnabled)
                    {
                        grabbingSender.ForceLocalDrop(previousGrabberControllerSide);
                    }
                }

                if (grabberEntityId.HasValue)
                {
                    // Update grabbing on the new game object
                    GameObject     controllerGameObject = LocalEntities.Instance.Get(grabberEntityId.Value).UnderlyingGameObject;
                    GrabbingSender grabbingSender       = controllerGameObject.GetComponent <GrabbingSender>();
                    if (grabbingSender != null && grabbingSender.isActiveAndEnabled)
                    {
                        grabbingSender.UpdateHeldEntity(grabberControllerSide, gameObject.EntityId());
                    }
                }
            }
        }
예제 #2
0
 private void OnGrabbableUpdate(Grabbable.Update update)
 {
     UpdateGrabberObject();
 }