/// <summary> /// Begin with the selection and movement of the focused target. /// </summary> public void DragAndDrop_Start() { if ((EyeTrackingProvider?.GazeTarget == gameObject) && (!objIsGrabbed)) { if (AudioFeedbackPlayer.Instance != null) { AudioFeedbackPlayer.Instance.PlaySound(audio_OnDragStart); } objIsGrabbed = true; EyeTrackingDemoUtils.GameObject_ChangeTransparency(gameObject, transparency_inTransition, ref originalTransparency); initialHandPos = handPos_absolute; initalGazeDir = new Vector3(EyeTrackingProvider.GazeDirection.x, EyeTrackingProvider.GazeDirection.y, EyeTrackingProvider.GazeDirection.z); Rigidbody rbody = GetComponent <Rigidbody>(); if (rbody != null) { originalUseGravity = rbody.useGravity; originalDrag = rbody.drag; rbody.useGravity = false; rbody.drag = float.PositiveInfinity; } OnDragStart.Invoke(); } }
/// <summary> /// Turn on the preview of the to-be-placed target. /// </summary> private void ActivatePreview() { if (previewGameObject == null) { previewGameObject = Instantiate(gameObject); previewGameObject.GetComponent <Collider>().enabled = false; EyeTrackingDemoUtils.GameObject_ChangeTransparency(previewGameObject, transparency_preview); placePreviewAtHitPoint = false; } previewGameObject.SetActive(true); }
/// <summary> /// Finalize placing the currently selected target. /// </summary> public void DragAndDrop_Finish() { if (objIsGrabbed) { if (AudioFeedbackPlayer.Instance != null) { AudioFeedbackPlayer.Instance.PlaySound(audio_OnDragStop); } if (onlyEyeWarpOnRelease) { manualTargetManip = true; if (plausibleLocation.HasValue) { MoveTargetTo(plausibleLocation.Value); } } objIsGrabbed = false; DeactivatePreview(); EyeTrackingDemoUtils.GameObject_ChangeTransparency(gameObject, originalTransparency); Rigidbody rbody = GetComponent <Rigidbody>(); if (rbody != null) { rbody.useGravity = originalUseGravity; rbody.drag = originalDrag; } if (useAsSlider) { OnDrop_SnapToClosestDecimal(); } OnDrop.Invoke(); } }