Exemple #1
0
    public void UpdateOngoingCurve()
    {
        if (pointsOnCurve.Count < 2)
        {
            return;
        }
        float scanlineX = scanlineRef
                          .GetComponent <RectTransform>().anchoredPosition.x -
                          GetComponent <RectTransform>().anchoredPosition.x;

        // Make sure scanline is before pointsOnCurve[1]; remove
        // points if necessary.
        while ((scanlineX - pointsOnCurve[1].x) * curveXDirection
               >= 0f)
        {
            if (pointsOnCurve.Count < 3)
            {
                break;
            }
            pointsOnCurve.RemoveFirst();
        }
        // Interpolate pointsOnCurve[0] and pointsOnCurve[1].
        float t = (scanlineX - pointsOnCurve[0].x) /
                  (pointsOnCurve[1].x - pointsOnCurve[0].x);

        pointsOnCurve[0] = new Vector2(
            scanlineX,
            Mathf.Lerp(pointsOnCurve[0].y, pointsOnCurve[1].y, t));
        curve.SetVerticesDirty();
    }
Exemple #2
0
    public void UpdateTrails()
    {
        float startX = GetComponent <RectTransform>()
                       .anchoredPosition.x;
        float endX = scanlineRef.GetComponent <RectTransform>()
                     .anchoredPosition.x;
        float width = Mathf.Min(Mathf.Abs(startX - endX),
                                durationTrailInitialWidth);

        // Override width to 0 if the scanline is on the wrong side.
        float durationTrailDirection =
            durationTrailEnd.transform.position.x -
            transform.position.x;
        float scanlineDirection =
            scanlineRef.transform.position.x -
            transform.position.x;

        if (durationTrailDirection * scanlineDirection < 0f)
        {
            width = 0f;
        }

        if (noteType == NoteType.Hold)
        {
            ongoingTrail.sizeDelta = new Vector2(width,
                                                 ongoingTrail.sizeDelta.y);
        }
        else
        {
            durationTrail.anchoredPosition = new Vector2(
                trailExtendsLeft ? -width : width,
                0f);
            durationTrail.sizeDelta = new Vector2(
                durationTrailInitialWidth - width,
                durationTrail.sizeDelta.y);
        }
    }