/// <inheritdoc /> public TimePointQueue GetTimerQueue(Preset preset, bool preserveBaseTime = true) { if (preset?.TimePointCollection == null || preset.TimePointCollection.Count == 0) { return(null); } TimePointQueue queue = new Queue <(TimeSpan, TimePoint)>(); TimeSpan time = preset.StartTime; TimePoint startTimePoint = _startTimePointCreator.GetStartTimePoint(time); time = startTimePoint.GetAbsoluteTime(); queue.Enqueue((time, startTimePoint)); foreach (var timerCycle in preset.TimerLoopDictionary.Keys) { if (preset.TimePointCollection.Count > 1) { // Список временных точек каждого временного сегмента, порядоченный по Id (по порядку создания) var timePoints = preset.TimePointCollection .Where(t => t.LoopNumber == timerCycle) .OrderBy(t => t.Id) .ToList(); if (timePoints.Count > 1) { for (var i = 0; i < preset.TimerLoopDictionary[timerCycle]; ++i) { foreach (var nextTimePoint in timePoints) { time = nextTimePoint.GetAbsoluteTime(time, preserveBaseTime); queue.Enqueue((time, nextTimePoint)); } } } else if (timePoints.Count == 1) { for (var i = 0; i < preset.TimerLoopDictionary[timerCycle]; ++i) { time = timePoints[0].GetAbsoluteTime(time, preserveBaseTime); queue.Enqueue((time, timePoints[0]));
public static bool IsStartTimePoint(TimePoint timePoint, Preset preset) => timePoint != null && preset != null && preset.StartTime.Equals(timePoint.GetAbsoluteTime()) && timePoint.Name.Equals(START_TIMEPOINT_NAME);