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(); }
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); } }