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()); } } } }
private void OnGrabbableUpdate(Grabbable.Update update) { UpdateGrabberObject(); }