using System.Collections.Generic; namespace RR.Common.Controls { /// /// Таблица длительности одного цикла каждого светового эффекта (в миллисекундах). /// Используется в для пересчёта количества циклов в секунды.ё /// Для запуска карусели использовать команду 855001 /// public static class LightCycleDurations { private static readonly Dictionary CycleMs = new() { { LightMode.HorizontalWave, 1000 }, // 10 { LightMode.VerticalWave, 1000 }, // 11 { LightMode.DiagonalWave, 3000 }, // 12 { LightMode.Rainbow, 3000 }, // 13 { LightMode.WaveUp, 3000 }, // 14 { LightMode.VerticalWaveUp, 1000 }, // 15 { LightMode.FinalWave, 1000 }, // 16 { LightMode.BlueWave, 1000 }, // 17 { LightMode.DiagonalWave2, 5000 }, // 18 { LightMode.FallingRows, 6000 }, // 19 { LightMode.OrangeWave, 3000 }, // 20 { LightMode.SeaWave, 3000 }, // 21 { LightMode.DiagonalWave3, 4000 }, // 22 }; /// Длительность одного цикла в миллисекундах. Для возвращает 0. public static int GetCycleMs(LightMode mode) { return CycleMs.TryGetValue(mode, out int ms) ? ms : 0; } /// Длительность одного цикла в секундах (float). public static float GetCycleSeconds(LightMode mode) { return GetCycleMs(mode) / 1000f; } /// /// Пересчитывает количество циклов в целые секунды для COM-команды. /// Дробные циклы поддерживаются (0.5 = половина цикла). /// public static int CyclesToCommandSeconds(LightMode mode, float cycles) { float totalSeconds = GetCycleSeconds(mode) * cycles; return (int)(totalSeconds + 0.5f); // округление до ближайшего целого } } }