Example #1
0
 void Play()
 {
     isPlaying = true;
     music.Play();
     startTime    = AudioSettings.dspTime;
     nextBeatLine = beatLines.GetNext();
 }
Example #2
0
    public BeatLerper(BPMEvent[] events_arr, double offset)
    {
        IEnumerable <BPMEvent> events  = events_arr.OrderBy(ev => ev.beat);
        List <BeatLine>        lines_l = new List <BeatLine>();

        BPMEvent ev1 = events.First();

        if (ev1.type == BPMEventType.Stop)
        {
            Debug.LogException(new System.Exception("First BPM event must be a BPM change"));
        }
        lines_l.Add(new BeatLine(0, double.PositiveInfinity, ev1.newBPM / 60, 0, offset));

        foreach (BPMEvent ev in events.Skip(1))
        {
            BeatLine left = lines_l.Last();
            left.end = left.TimeFromBeat(ev.beat);
            lines_l[lines_l.Count - 1] = left;

            if (ev.type == BPMEventType.BPMChange)
            {
                double new_bps = ev.newBPM / 60;
                lines_l.Add(new BeatLine(left.end, double.PositiveInfinity, new_bps, ev.beat - new_bps * left.end, offset));
            }
            else // it's a stop
            {
                lines_l.Add(new BeatLine(left.end, left.end + ev.stopDuration, 0, ev.beat, offset));
                lines_l.Add(new BeatLine(left.end + ev.stopDuration, double.PositiveInfinity, left.bps, ev.beat - left.bps * (left.end + ev.stopDuration), offset));
            }
        }

        lines = lines_l.ToArray();
    }
Example #3
0
    void Update()
    {
        if (!isPlaying)
        {
            return;
        }
        double  currentTime = AudioSettings.dspTime - startTime;
        Vector3 pos         = slider.transform.position;

        pos.z = (float)(currentTime * DistancePerSec);
        slider.transform.position = pos;

        if (nextBeatLine != null && pos.z + 1.0f >= nextBeatLine.transform.position.z)
        {
            nextBeatLine.Clear(Mathf.Abs(slider.GetPointerX() - nextBeatLine.GetBeatPosX()) <= SuccessDistance);
            nextBeatLine = beatLines.GetNext();
        }

        if (fullSpinSign == 0)
        {
            if (!slider.FullSpinBound.HasValue)
            {
                Vector3 cameraAngles = cameraObject.transform.eulerAngles;
                cameraAngles.z = Mathf.Lerp(-CameraAngleMax, CameraAngleMax, slider.CurrentPointerValue);
                cameraObject.transform.eulerAngles = cameraAngles;
            }
            else
            {
                fullSpinSign    = slider.FullSpinBound == 0 ? 1 : -1;
                fullSpinCurrent = cameraObject.transform.eulerAngles.z;
                if (fullSpinCurrent > CameraAngleMax)
                {
                    fullSpinCurrent -= 360;
                }
                else if (fullSpinCurrent < -CameraAngleMax)
                {
                    fullSpinCurrent += 360;
                }
                fullSpinTarget   = fullSpinSign == -1 ? -360 : 360;
                fullSpinProgress = 0;
            }
        }
        else
        {
            fullSpinProgress += Time.deltaTime * fullSpinSpeed;
            fullSpinProgress  = Mathf.Min(fullSpinProgress, 1);
            Vector3 cameraAngles = cameraObject.transform.eulerAngles;
            cameraAngles.z = Mathf.Lerp(fullSpinCurrent, fullSpinTarget, fullSpinProgress);
            if (fullSpinProgress >= 1)
            {
                fullSpinSign = 0;
            }
            cameraObject.transform.eulerAngles = cameraAngles;
        }
    }