/// <summary> /// Set the hand collider tag. /// </summary> private void Start() { gameObject.tag = "Player"; collidings = new List <Collider>(); smoothingBuffer = new Queue <Vector3>(); for (i = 0; i < smoothingFrame; i++) { smoothingBuffer.Enqueue(Vector3.zero); xSum = 0; ySum = 0; zSum = 0; } trianglurNumber = smoothingFrame * (smoothingFrame + 1) / 2; if (entity.IsOwner) { _manomotionManager = GameObject.FindGameObjectWithTag("ManomotionManager").GetComponent <ManomotionManager>(); } grabTrigger = ManoGestureTrigger.GRAB_GESTURE; pinch = ManoGestureContinuous.HOLD_GESTURE; worldOrigin = GameObject.FindGameObjectWithTag("WorldOrigin"); // worldOriginOffsetPosition = worldOrigin.transform.position; // worldOriginOffsetRotaion = worldOrigin.transform.rotation; // transform.rotation = worldOriginOffsetRotaion; // transform.rotation = worldOrigin.transform.InverseTransformDirection(Vector3.zero); }
private void DisplayTriggerGesture(ManoGestureTrigger triggerGesture, TrackingInfo trackingInfo) { switch (triggerGesture) { case ManoGestureTrigger.NO_GESTURE: visualDisplay.text += "ManoGestureTrigger: NO_GESTURE\n"; break; case ManoGestureTrigger.CLICK: visualDisplay.text += "ManoGestureTrigger: CLICK\n"; break; case ManoGestureTrigger.DROP: visualDisplay.text += "ManoGestureTrigger: DROP\n"; break; case ManoGestureTrigger.GRAB_GESTURE: visualDisplay.text += "ManoGestureTrigger: GRAB_GESTURE\n"; break; case ManoGestureTrigger.PICK: visualDisplay.text += "ManoGestureTrigger: PICK\n"; break; case ManoGestureTrigger.RELEASE_GESTURE: visualDisplay.text += "ManoGestureTrigger: RELEASE_GESTURE\n"; break; default: visualDisplay.text += "ManoGestureTrigger: \n"; break; } }
/// <summary> /// Spawns a cube in front of the user when the user performs a Click Gesture and its detected by the system. /// </summary> private void SpawnCubewithclickTriggerGesture() { //All the information for a detected hand. It refers to a single hand. HandInfo handInformation = ManomotionManager.Instance.Hand_infos[0].hand_info; //All the gesture information for this hand. GestureInfo gestureInformation = handInformation.gesture_info; //The trigger gesture that is detected in this frame. ManoGestureTrigger currentDetectedTriggerGesture = gestureInformation.mano_gesture_trigger; if (currentDetectedTriggerGesture == ManoGestureTrigger.CLICK) { //A click has been performed by the user and it has been detected as the current trigger Gesture. ManoClicked = true; StartCoroutine(timer(1)); //GameObject newItem = Instantiate(itemPrefab); ////Spawn a cube at the position of the camera, also adding a small offset forward so it does not spawn right in front of it. //Vector3 positionToMove = Camera.main.transform.position + (Camera.main.transform.forward * 2); //newItem.transform.position = positionToMove; ////Make the phone vibrate for feedback. Handheld.Vibrate(); } else if (currentDetectedTriggerGesture == ManoGestureTrigger.RELEASE_GESTURE) { //A grab and release has been performed by the user and it has been detected as the current trigger Gesture. ManoReleased = true; StartCoroutine(timer(2)); Handheld.Vibrate(); } }
/// <summary> /// Disables all trigers except. /// </summary> /// <param name="trigger">Trigger.</param> public void DisableAllTrigersExcept(ManoGestureTrigger trigger) { DisableAllTriggers(); switch (trigger) { case ManoGestureTrigger.CLICK: ShouldShowClick(true); break; case ManoGestureTrigger.GRAB_GESTURE: ShouldShowGrab(true); break; case ManoGestureTrigger.RELEASE_GESTURE: ShouldShowRelease(true); break; case ManoGestureTrigger.PICK: ShouldShowPick(true); break; case ManoGestureTrigger.DROP: ShouldShowDrop(true); break; } }
public GameObject ArrowVisual; //show hide placeholder, actual arrow spawns at camera z // Start is called before the first frame update void Start() { //SpawnArrow(); //ShootLogic(); click = ManoGestureTrigger.CLICK; ac = GetComponent <AudioSource>(); }
private void Initialize() { grab = ManoGestureContinuous.CLOSED_HAND_GESTURE; pinch = ManoGestureContinuous.HOLD_GESTURE; click = ManoGestureTrigger.CLICK; cubeRenderer = GetComponent <Renderer>(); cubeRenderer.sharedMaterial = arCubeMaterial[0]; cubeRenderer.material = arCubeMaterial[0]; }
/// <summary> /// Based on the continuous gesture performed (Open hand or Closed Hand) the ghost will change its appearance /// </summary> /// <param name="gesture">Gesture.</param> /// <param name="warning">Warning.</param> void ShootProjectiles(ManoGestureTrigger someGesture) { if (someGesture == shootGesture && reloaded == true) { holdAnimation.SetActive(false); var projectile = (GameObject)Instantiate(projectilePrefab, projectileSpawn.position, projectileSpawn.rotation); reloaded = false; reloading = false; } }
// Update is called once per frame void Update() { TrackingInfo trackingInfo = ManomotionManager.Instance.Hand_infos[0].hand_info.tracking_info; GestureInfo gesture = ManomotionManager.Instance.Hand_infos[0].hand_info.gesture_info; ManoGestureTrigger someGesture = gesture.mano_gesture_trigger; Warning warning = ManomotionManager.Instance.Hand_infos[0].hand_info.warning; ContinuousGesture(gesture, trackingInfo, warning); ShootProjectiles(someGesture, warning); }
/// <summary> /// Displays information regarding the Trigger Gesture of the detected hand /// </summary> /// <param name="gesture_info"></param> void DisplayTriggerGesture(GestureInfo gesture_info) { triggerGestureGizmo.SetActive(Show_trigger_gesture); if (Show_trigger_gesture) { ManoGestureTrigger trigger = gesture_info.mano_gesture_trigger; switch (trigger) { case ManoGestureTrigger.CLICK: triggerGestureText.text = "Trigger: Click"; break; case ManoGestureTrigger.SWIPE_LEFT: triggerGestureText.text = "Trigger: Swipe Left"; break; case ManoGestureTrigger.SWIPE_RIGHT: triggerGestureText.text = "Trigger: Swipe Right"; break; case ManoGestureTrigger.GRAB: triggerGestureText.text = "Trigger: Grab"; Object.GetComponent <Renderer>().material.color = Color.red; Fire(); break; case ManoGestureTrigger.TAP_POINTING: triggerGestureText.text = "Trigger: Tap"; break; case ManoGestureTrigger.DROP: triggerGestureText.text = "Trigger: Drop"; break; case ManoGestureTrigger.PICK: triggerGestureText.text = "Trigger: Pick"; break; case ManoGestureTrigger.RELEASE: triggerGestureText.text = "Trigger: Release"; Object.GetComponent <Renderer>().material.color = Color.blue; Fire(); break; case ManoGestureTrigger.NO_GESTURE: triggerGestureText.text = "Trigger: "; break; default: triggerGestureText.text = "Trigger: "; break; } } }
/// <summary> /// Display Visual information of the detected trigger gesture. /// In the case where a click is intended (Open pinch, Closed Pinch, Open Pinch) we are clearing out the visual information that are generated from the pick/drop /// </summary> /// <param name="triggerGesture">Requires an input of trigger gesture.</param> void DisplayTriggerGesture(ManoGestureTrigger triggerGesture, TrackingInfo trackingInfo) { if (triggerGesture != ManoGestureTrigger.NO_GESTURE) { if (_showPickTriggerGesture) { if (triggerGesture == ManoGestureTrigger.PICK) { TriggerDisplay(trackingInfo, ManoGestureTrigger.PICK); } } if (_showDropTriggerGesture) { if (triggerGesture == ManoGestureTrigger.DROP) { if (previousTrigger != ManoGestureTrigger.CLICK) { TriggerDisplay(trackingInfo, ManoGestureTrigger.DROP); } } } if (_showClickTriggerGesture) { if (triggerGesture == ManoGestureTrigger.CLICK) { TriggerDisplay(trackingInfo, ManoGestureTrigger.CLICK); if (GameObject.Find("PICK")) { GameObject.Find("PICK").SetActive(false); } } } if (_showGrabTriggerGesture) { if (triggerGesture == ManoGestureTrigger.GRAB_GESTURE) { TriggerDisplay(trackingInfo, ManoGestureTrigger.GRAB_GESTURE); } } if (_showReleaseTriggerGesture) { if (triggerGesture == ManoGestureTrigger.RELEASE_GESTURE) { TriggerDisplay(trackingInfo, ManoGestureTrigger.RELEASE_GESTURE); } } } previousTrigger = triggerGesture; }
/// <summary> /// Displays the visual information of the performed trigger gesture. /// </summary> /// <param name="triggerGesture">Trigger gesture.</param> void TriggerDisplay(TrackingInfo trackingInfo, ManoGestureTrigger triggerGesture) { if (GetCurrentPooledTrigger()) { GameObject triggerVisualInformation = GetCurrentPooledTrigger(); triggerVisualInformation.SetActive(true); triggerVisualInformation.name = triggerGesture.ToString(); triggerVisualInformation.GetComponent <TriggerGizmo>().InitializeTriggerGizmo(triggerGesture); triggerVisualInformation.GetComponent <RectTransform>().position = Camera.main.ViewportToScreenPoint(trackingInfo.palm_center); } }
//[SerializeField] //Text currentRequested; //[SerializeField] //Text clickEnabled; //[SerializeField] //Text grabEnabled; //[SerializeField] //Text releaseEnabled; //[SerializeField] //Text pickEnabled; //[SerializeField] //Text dropEnabled; //[SerializeField] //Text respondingText; private void UpdateRequestedTrigger() { //The issue that I am facing is that when I update the trigger It changes so fast that I am not able to show the trigger try { if (_currentInstructionStep < _instructionSteps - 1) { requestedTrigger = triggerGesturesToPerformInstructions[_currentInstructionStep].triggerGestures[ammountOfTriggersPerformed]; StartCoroutine(DisableTriggersAfterDelay(delay, requestedTrigger)); switch (requestedTrigger) { case ManoGestureTrigger.CLICK: ApplicationManager.Instance.howToInstructor.ShouldShowTriggerAnimationVisuals(true); ApplicationManager.Instance.runTimeApplication.ShouldShowClick(true); ApplicationManager.Instance.howToInstructor.triggerAnimations.ShowHowToClick(); break; case ManoGestureTrigger.GRAB_GESTURE: ApplicationManager.Instance.howToInstructor.ShouldShowTriggerAnimationVisuals(true); ApplicationManager.Instance.runTimeApplication.ShouldShowGrab(true); ApplicationManager.Instance.howToInstructor.triggerAnimations.ShowHowToGrab(); break; case ManoGestureTrigger.RELEASE_GESTURE: ApplicationManager.Instance.howToInstructor.ShouldShowTriggerAnimationVisuals(true); ApplicationManager.Instance.runTimeApplication.ShouldShowRelease(true); ApplicationManager.Instance.howToInstructor.triggerAnimations.ShowHowToRelease(); break; case ManoGestureTrigger.PICK: ApplicationManager.Instance.howToInstructor.ShouldShowTriggerAnimationVisuals(true); ApplicationManager.Instance.runTimeApplication.ShouldShowPick(true); ApplicationManager.Instance.howToInstructor.triggerAnimations.ShowHowToPick(); break; case ManoGestureTrigger.DROP: ApplicationManager.Instance.howToInstructor.ShouldShowTriggerAnimationVisuals(true); ApplicationManager.Instance.runTimeApplication.ShouldShowDrop(true); ApplicationManager.Instance.howToInstructor.triggerAnimations.ShowHowToDrop(); break; default: break; } } } catch (System.Exception ex) { Debug.Log("I cant assign trigger"); } }
//This is how the system responds to user input private void RepondToUserActions() { //This never stops because it never reaches the Stop responding if (_shouldRespondToUserInput) { ManoGestureTrigger detectedTrigger = ManomotionManager.Instance.Hand_infos[0].hand_info.gesture_info.mano_gesture_trigger; if (detectedTrigger == requestedTrigger && detectedTrigger != ManoGestureTrigger.NO_GESTURE) { HandleCorrectUserGestureInput(); } } }
/// <summary> /// Displays the visual information of the performed trigger gesture. /// </summary> /// <param name="bounding_box">Bounding box.</param> /// <param name="triggerGesture">Trigger gesture.</param> void TriggerDisplay(TrackingInfo trackingInfo, ManoGestureTrigger triggerGesture) { if (GetCurrentPooledTrigger()) { GameObject triggerVisualInformation = GetCurrentPooledTrigger(); triggerVisualInformation.SetActive(true); triggerVisualInformation.name = triggerGesture.ToString(); triggerVisualInformation.GetComponent <TriggerGizmo>().InitializeTriggerGizmo(triggerGesture); triggerVisualInformation.GetComponent <RectTransform>().position = ManoUtils.Instance.CalculateScreenPosition(trackingInfo.palm_center, trackingInfo.depth_estimation); } }
/// <summary> /// Displays the visual information of the performed trigger gesture. /// </summary> /// <param name="bounding_box">Bounding box.</param> /// <param name="triggerGesture">Trigger gesture.</param> void TriggerDisplay(BoundingBox bounding_box, ManoGestureTrigger triggerGesture) { GameObject triggerVisualInformation = Instantiate(triggerTextPrefab); triggerVisualInformation.name = triggerGesture.ToString(); triggerVisualInformation.GetComponent <TriggerGizmo>().SetTriggerGizmoVisualization(triggerGesture); triggerVisualInformation.transform.SetParent(transform); triggerVisualInformation.transform.localPosition = new Vector2((bounding_box.top_left.x + bounding_box.width / 2) * Screen.width, (1 - bounding_box.top_left.y - bounding_box.height / 2) * Screen.height); float midX = (bounding_box.top_left.x + bounding_box.width / 2); float midY = (1 - bounding_box.top_left.y - bounding_box.height / 2); triggerVisualInformation.GetComponent <RectTransform>().position = Camera.main.ViewportToScreenPoint(new Vector2(midX, midY)); }
/// <summary> /// Displays information regarding the Trigger Gesture of the detected hand /// </summary> /// <param name="gesture_info"></param> void DisplayTriggerGesture(GestureInfo gesture_info) { triggerGestureGizmo.SetActive(Show_trigger_gesture); if (Show_trigger_gesture) { ManoGestureTrigger trigger = gesture_info.mano_gesture_trigger; switch (trigger) { case ManoGestureTrigger.CLICK_GESTURE: triggerGestureText.text = "Trigger: Click"; break; case ManoGestureTrigger.SWIPE_LEFT_GESTURE: triggerGestureText.text = "Trigger: Swipe Left"; break; case ManoGestureTrigger.SWIPE_RIGHT_GESTURE: triggerGestureText.text = "Trigger: Swipe Right"; break; case ManoGestureTrigger.GRAB_GESTURE: triggerGestureText.text = "Trigger: Grab"; break; case ManoGestureTrigger.TAP_POINTING_GESTURE: triggerGestureText.text = "Trigger: Tap"; break; case ManoGestureTrigger.RELEASE_PINCH: triggerGestureText.text = "Trigger: Release Pinch"; break; case ManoGestureTrigger.GRAB_PINCH: triggerGestureText.text = "Trigger: Grab Pinch"; break; case ManoGestureTrigger.RELEASE_GESTURE: triggerGestureText.text = "Trigger: Release"; break; case ManoGestureTrigger.NO_GESTURE: triggerGestureText.text = "Trigger: "; break; default: triggerGestureText.text = "Trigger: "; break; } } }
/// <summary> /// Display Visual information of the detected trigger gesture. /// In the case where a click is intended (Open pinch, Closed Pinch, Open Pinch) we are clearing out the visual information that are generated from the pick/drop /// </summary> /// <param name="triggerGesture">Requires an input of trigger gesture.</param> void DisplayTriggerGesture(ManoGestureTrigger triggerGesture, BoundingBox bounding_box) { if (triggerGesture != ManoGestureTrigger.NO_GESTURE) { if (displayPick) { if (triggerGesture == ManoGestureTrigger.PICK) { TriggerDisplay(bounding_box, ManoGestureTrigger.PICK); } } if (displayDrop) { if (triggerGesture == ManoGestureTrigger.DROP) { if (previousTrigger != ManoGestureTrigger.CLICK) { TriggerDisplay(bounding_box, ManoGestureTrigger.DROP); } } } if (displayClick) { if (triggerGesture == ManoGestureTrigger.CLICK) { TriggerDisplay(bounding_box, ManoGestureTrigger.CLICK); if (GameObject.Find("PICK")) { Destroy(GameObject.Find("PICK")); } } } if (displayGrab) { if (triggerGesture == ManoGestureTrigger.GRAB_GESTURE) { TriggerDisplay(bounding_box, ManoGestureTrigger.GRAB_GESTURE); } } if (displayRelease) { if (triggerGesture == ManoGestureTrigger.RELEASE_GESTURE) { TriggerDisplay(bounding_box, ManoGestureTrigger.RELEASE_GESTURE); } } } previousTrigger = triggerGesture; }
private void Initialize() { grab = ManoGestureContinuous.CLOSED_HAND_GESTURE; pinch = ManoGestureContinuous.HOLD_GESTURE; openPinch = ManoGestureContinuous.OPEN_PINCH_GESTURE; click = ManoGestureTrigger.CLICK; grabTrigger = ManoGestureTrigger.GRAB_GESTURE; cubeRenderer = GetComponent <Renderer>(); cubeRenderer.sharedMaterial = arCubeMaterial[0]; cubeRenderer.material = arCubeMaterial[0]; handCollider = GameObject.FindGameObjectsWithTag("Player")[0]; actionCoolDown = 0; defaultParent = transform.parent.gameObject; FreeFall(); }
/// <summary> /// Updates the color of the line renderer, that connects the outer/contour points, according to the gesture performed. /// </summary> /// <param name="gesture_info">Requires the gesture information from the detected hand</param> /// <param name="index">Requires the gesture information from the detected hand</param> void UpdateLineColor(GestureInfo gesture_info, int index) { ManoGestureTrigger trigger = gesture_info.mano_gesture_trigger; switch (trigger) { case ManoGestureTrigger.NO_GESTURE: break; case ManoGestureTrigger.CLICK: HighLightWithColor(_clickLineColor, index); break; case ManoGestureTrigger.SWIPE_LEFT: break; case ManoGestureTrigger.SWIPE_RIGHT: break; case ManoGestureTrigger.GRAB: HighLightWithColor(_grabLineColor, index); break; case ManoGestureTrigger.TAP_POINTING: HighLightWithColor(_tapLineColor, index); break; case ManoGestureTrigger.DROP: HighLightWithColor(_releasePinchLineColor, index); break; case ManoGestureTrigger.PICK: HighLightWithColor(_grabPinchLineColor, index); break; case ManoGestureTrigger.RELEASE: HighLightWithColor(_releaseLineColor, index); break; default: break; } }
public virtual void InitializeTriggerGizmo(ManoGestureTrigger triggerGesture) { this.transform.localScale = originalScale; canExpand = true; if (!triggerLabelText) { triggerLabelText = GetComponent <Text>(); } switch (triggerGesture) { case ManoGestureTrigger.CLICK: triggerLabelText.text = "Click"; triggerLabelText.color = clickColor; break; case ManoGestureTrigger.DROP: triggerLabelText.text = "Drop"; triggerLabelText.color = dropColor; break; case ManoGestureTrigger.PICK: triggerLabelText.text = "Pick"; triggerLabelText.color = pickColor; break; case ManoGestureTrigger.GRAB_GESTURE: triggerLabelText.text = "Grab"; triggerLabelText.color = grabColor; break; case ManoGestureTrigger.RELEASE_GESTURE: triggerLabelText.text = "Release"; triggerLabelText.color = releaseColor; break; default: break; } }
private void Initialize() { grab = ManoGestureContinuous.CLOSED_HAND_GESTURE; pinch = ManoGestureContinuous.HOLD_GESTURE; openPinch = ManoGestureContinuous.OPEN_PINCH_GESTURE; click = ManoGestureTrigger.CLICK; grabTrigger = ManoGestureTrigger.GRAB_GESTURE; cubeRenderer = GetComponent <Renderer>(); cubeRenderer.sharedMaterial = arCubeMaterial[0]; cubeRenderer.material = arCubeMaterial[0]; actionCoolDown = 0; defaultParent = transform.parent.gameObject; _arDebugManager = GameObject.Find("AR Session Origin").GetComponent <ARDebugManager>(); // colliding = null; // FreeFall(); // if (BoltNetwork.IsServer) // { // _arDebugManager.LogInfo($"You are the server, you can move me"); // } }
public virtual void SetTriggerGizmoVisualization(ManoGestureTrigger triggerGesture) { if (!triggerLabelText) { triggerLabelText = GetComponent <Text>(); } switch (triggerGesture) { case ManoGestureTrigger.CLICK: triggerLabelText.text = "Click"; triggerLabelText.color = clickColor; break; case ManoGestureTrigger.DROP: triggerLabelText.text = "Drop"; triggerLabelText.color = dropColor; break; case ManoGestureTrigger.PICK: triggerLabelText.text = "Pick"; triggerLabelText.color = pickColor; break; case ManoGestureTrigger.GRAB_GESTURE: triggerLabelText.text = "Grab"; triggerLabelText.color = grabColor; break; case ManoGestureTrigger.RELEASE_GESTURE: triggerLabelText.text = "Release"; triggerLabelText.color = releaseColor; break; default: break; } }
private void Initialize() { grab = ManoGestureContinuous.CLOSED_HAND_GESTURE; pinch = ManoGestureContinuous.HOLD_GESTURE; openPinch = ManoGestureContinuous.OPEN_PINCH_GESTURE; click = ManoGestureTrigger.CLICK; grabTrigger = ManoGestureTrigger.GRAB_GESTURE; cubeRenderer = GetComponent <Renderer>(); cubeRenderer.sharedMaterial = arCubeMaterial[0]; cubeRenderer.material = arCubeMaterial[0]; actionCoolDown = 0; _arDebugManager = GameObject.Find("AR Session Origin").GetComponent <ARDebugManager>(); // colliding = null; // FreeFall(); if (entity.IsOwner) { gameObject.GetComponent <Rigidbody>().useGravity = true; } else { gameObject.GetComponent <Rigidbody>().useGravity = false; } }
public bool IsReleaseGesture(ManoGestureTrigger trigger) { return(trigger == ManoGestureTrigger.DROP); }
public bool IsGrabPieceGesture(ManoGestureTrigger trigger) { return(trigger == ManoGestureTrigger.PICK); }
IEnumerator DisableTriggersAfterDelay(float time, ManoGestureTrigger trigger) { yield return(new WaitForSeconds(time)); ApplicationManager.Instance.runTimeApplication.DisableAllTrigersExcept(trigger); }