示例#1
0
    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);
        }
    }
示例#2
0
        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);
        }
示例#3
0
    /// <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);
    }