public override IEnumerable <MapEvent> StrobePassForLane(IEnumerable <MapEvent> original, int type, EventsContainer.PropMode propMode, JSONNode propID)
    {
        List <MapEvent> generatedObjects = new List <MapEvent>();

        float startTime = original.First()._time;
        float endTime   = original.Last()._time;

        List <int> alternatingTypes = new List <int>(values);
        int        typeIndex        = 0;

        if (alternateColors)
        {
            for (int i = 0; i < values.Count(); i++)
            {
                alternatingTypes.Add(InvertColors(alternatingTypes[i]));
            }
        }
        float    distanceInBeats  = endTime - startTime;
        float    originalDistance = distanceInBeats;
        MapEvent lastPassed       = null;

        while (distanceInBeats >= 0)
        {
            if (typeIndex >= alternatingTypes.Count)
            {
                typeIndex = 0;
            }

            MapEvent any = original.Where(x => x._time <= endTime - distanceInBeats).LastOrDefault();
            if (any != lastPassed && dynamic && (MapEvent.IsBlueEventFromValue(any._value) != MapEvent.IsBlueEventFromValue(alternatingTypes[typeIndex])))
            {
                lastPassed = any;
                for (int i = 0; i < alternatingTypes.Count; i++)
                {
                    alternatingTypes[i] = InvertColors(alternatingTypes[i]);
                }
            }

            int      value    = alternatingTypes[typeIndex];
            float    progress = (originalDistance - distanceInBeats) / originalDistance;
            float    newTime  = (easingFunc(progress) * originalDistance) + startTime;
            MapEvent data     = new MapEvent(newTime, type, value);
            if (propMode != EventsContainer.PropMode.Off)
            {
                if (value != MapEvent.LIGHT_VALUE_BLUE_ON && value != MapEvent.LIGHT_VALUE_RED_ON && value != MapEvent.LIGHT_VALUE_OFF)
                {
                    data._value = value < 5
                        ? MapEvent.LIGHT_VALUE_BLUE_ON
                        : MapEvent.LIGHT_VALUE_RED_ON;
                }

                data._customData = new JSONObject();
                data._customData.Add("_lightID", propID);
            }

            generatedObjects.Add(data);
            typeIndex++;

            if (distanceInBeats > 0 && (distanceInBeats -= 1 / precision) < -0.001f)
            {
                distanceInBeats = 0;
            }
            else if (distanceInBeats <= 0)
            {
                break;
            }
        }

        return(generatedObjects);
    }