public static GameObject StartOrResetGesture(DigitalRubyShared.GestureRecognizer r, bool bringToFront, Camera camera, GameObject obj, SpriteRenderer spriteRenderer, GestureRecognizerComponentScriptBase.GestureObjectMode mode) { GameObject result = null; if (r.State == GestureRecognizerState.Began) { if ((result = GestureIntersectsObject(r, camera, obj, mode)) != null) { SpriteRenderer _spriteRenderer; if (bringToFront && (_spriteRenderer = result.GetComponent <SpriteRenderer>()) != null) { _spriteRenderer.sortingOrder = 1000; } } else { r.Reset(); } } return(result); }
private static GameObject GestureIntersectsObject(DigitalRubyShared.GestureRecognizer r, Camera camera, GameObject obj, GestureRecognizerComponentScriptBase.GestureObjectMode mode) { captureRaycastResults.Clear(); PointerEventData p = new PointerEventData(EventSystem.current); p.Reset(); p.position = new Vector2(r.FocusX, r.FocusY); p.clickCount = 1; EventSystem.current.RaycastAll(p, captureRaycastResults); captureRaycastResults.Sort(RaycastResultCompare); foreach (RaycastResult result in captureRaycastResults) { if (result.gameObject == obj) { return(result.gameObject); } else if (result.gameObject.GetComponent <Collider>() != null || result.gameObject.GetComponent <Collider2D>() != null || result.gameObject.GetComponent <FingersPanRotateScaleComponentScript>() != null) { if (mode == GestureRecognizerComponentScriptBase.GestureObjectMode.AllowOnAnyGameObjectViaRaycast) { return(result.gameObject); } // blocked by a collider or another gesture, bail break; } } return(null); }