예제 #1
0
    protected override IEnumerator SurveyRoutine(Context context, List <GameAction.ParameterData> result, System.Action complete, System.Action cancel)
    {
        _hasClicked = false;
        _started    = false;

        _currentSuccessRate = SurveySuccessRating.Four;

        Circle.transform.localPosition = LeftCircleLimit.localPosition;

        Section.localPosition  = new Vector3(UnityEngine.Random.Range(SectionLeftRandomLimit.localPosition.x, SectionRightRandomLimit.localPosition.x), 0, 0);
        CritZone.localPosition = Section.localPosition;
        Section.localScale     = new Vector3(0, 1, 1);

        _circleAnim = DOTween.Sequence();
        _circleAnim.Append(Circle.transform.DOLocalMoveX(RightCircleLimit.transform.localPosition.x, CircleSpeed).SetEase(Ease.Linear));
        _circleAnim.SetLoops(-1, LoopType.Yoyo);

        SectionSpriteRenderer.color = SuccessColor;

        yield return(new WaitForSeconds(0.1f));

        _started = true;

        while (!_hasClicked)
        {
            Section.localScale = new Vector3(Mathf.Min(Section.localScale.x + (Time.deltaTime * SectionGrowthSpeed), SectionSizeMax), 1, 1);
            if (Section.localScale.x > SectionSizeFailedMax)
            {
                _currentSuccessRate         = SurveySuccessRating.Two;
                SectionSpriteRenderer.color = FailedColor;
            }
            else if (Section.localScale.x > SectionSizeAverageMax)
            {
                _currentSuccessRate         = SurveySuccessRating.Three;
                SectionSpriteRenderer.color = AverageColor;
            }

            yield return(null);
        }

        _circleAnim?.Kill();

        if ((Circle.transform.position.x < RightCritZoneLimit.transform.position.x) && (Circle.transform.position.x > LeftCritZoneLimit.transform.position.x))
        {
            // Critical
            result.Add(new GameActionParameterSuccessRate.Data(SurveySuccessRating.Five));

            FloatingTextSystem.Instance.RequestText(Circle.transform.position, "Crit", Color.white);
        }
        else if ((Circle.transform.position.x < RightSectionLimit.transform.position.x) && (Circle.transform.position.x > LeftSectionLimit.transform.position.x))
        {
            // Success
            result.Add(new GameActionParameterSuccessRate.Data(_currentSuccessRate));
        }
        else
        {
            // Failed
            result.Add(new GameActionParameterSuccessRate.Data(SurveySuccessRating.One));
        }

        yield return(new WaitForSeconds(0.5f));

        complete();
    }
예제 #2
0
 public Data(SurveySuccessRating SuccessRate)
 {
     this.SuccessRate = SuccessRate;
 }