IEnumerator HandleSwipe(Image imageWidget) { SwipeablePhoto photoComponent = imageWidget.gameObject.AddComponent <SwipeablePhoto>(); while (true) { photoComponent.ResetSwipe(); yield return(new WaitUntil(() => photoComponent.CurrentState == SwipeablePhoto.SwipeState.Dropped)); if (photoComponent.rectTransform.anchoredPosition.x < -MaskObject.rectTransform.rect.width * 0.4f) { LastSwipeResult = SwipeResult.Left; Destroy(imageWidget.gameObject); yield break; } else if (photoComponent.rectTransform.anchoredPosition.x > MaskObject.rectTransform.rect.width * 0.4f) { LastSwipeResult = SwipeResult.Right; Destroy(imageWidget.gameObject); yield break; } yield return(null); } }
public async Task <SwipeResult> Swipe(Direction direction) { await AnimationsEnded(); CurrentSwipeResult = new SwipeResult { MovedGems = new List <Gem>(), DeadGems = new List <Gem>(), FusedGems = new List <Gem>() }; foreach (GemBase gem in IGems) { gem.Reactivate(); } while (!SwipeIsResolved()) { foreach (Cell cell in CellsList) { (cell.AssignedGem)?.TryResolveSwipe(direction); } await Task.Delay(1); } await AnimationsEnded(); return(CurrentSwipeResult); }
/// <summary> /// /// </summary> /// <param name="data"></param> /// <returns></returns> private bool IsSwipe(InputData data, out SwipeResult result) { result = new SwipeResult(); float inchesPerSecSqr = data.Position.sqrMagnitude / (_dpiSqr * data.Seconds * data.Seconds); bool isSwipe = inchesPerSecSqr > _swipeInchesPerSecMin * _swipeInchesPerSecMin; if (!isSwipe) { result.Type = SwipeResultType.SpeedFail; return(false); } isSwipe = data.Position.sqrMagnitude > _swipeInchesSqrMin * _dpiSqr; if (!isSwipe) { result.Type = SwipeResultType.DistanceFail; return(false); } result.SpeedRatio = Mathf.Clamp01(Mathf.Sqrt(inchesPerSecSqr) / _swipeInchesPerSecMax); result.Type = SwipeResultType.Success; return(true); }