private void PlayToggle(bool isPlaying)
    {
        if (!IsActive)
        {
            return;
        }
        float time = atsc.CurrentBeat;
        IEnumerable <BeatmapObjectContainer> rotations = events.LoadedContainers.Where(
            x => x.objectData._time <= atsc.CurrentBeat && (x as BeatmapEventContainer).eventData.IsRotationEvent);

        Rotation = 0;
        if (rotations.Any())
        {
            MapEvent e = null; //The last event in time should be the last one through the foreach loop so this should work.
            foreach (BeatmapObjectContainer o in rotations)
            {
                e = o.objectData as MapEvent;
                if (e._time == atsc.CurrentBeat && e._type == MapEvent.EVENT_TYPE_LATE_ROTATION)
                {
                    continue;
                }
                Rotation += e.GetRotationDegreeFromValue() ?? 0;
            }
            LatestRotationEvent = e;
        }
        else
        {
            LatestRotationEvent = null;
        }
        RotationChangedEvent.Invoke(false, Rotation);
    }
    private void EventPassedThreshold(bool initial, int index, BeatmapObject obj)
    {
        MapEvent e = obj as MapEvent;

        if (e is null || !IsActive || e == LatestRotationEvent || !e.IsRotationEvent)
        {
            return;
        }
        int rotationValue = e.GetRotationDegreeFromValue() ?? 0;

        Rotation           += rotationValue;
        LatestRotationEvent = e;
        RotationChangedEvent.Invoke(true, Rotation);
    }