private static bool CoversAxis(RealTouchAxis commandAxis, RealTouchAxis filterAxis) { if (filterAxis == RealTouchAxis.Unknown || commandAxis == RealTouchAxis.Unknown) { return(false); } if (commandAxis == RealTouchAxis.All) { return(true); } switch (filterAxis) { case RealTouchAxis.AnyBelt: return(commandAxis == RealTouchAxis.TopBelt || commandAxis == RealTouchAxis.BottomBelt || commandAxis == RealTouchAxis.BothBelts); case RealTouchAxis.TopBelt: return(commandAxis == RealTouchAxis.TopBelt || commandAxis == RealTouchAxis.BothBelts); case RealTouchAxis.BottomBelt: return(commandAxis == RealTouchAxis.BottomBelt || commandAxis == RealTouchAxis.BothBelts); default: return(commandAxis == filterAxis); } }
private static List <RealTouchCommand> FilterAndSortCommands(List <RealTouchCommand> commands, RealTouchAxis axis, TimeSpan minPeriodicDuration) { List <RealTouchCommand> result = new List <RealTouchCommand>(); foreach (RealTouchCommand command in commands) { if (!CoversAxis(command.Axis, axis)) { continue; } if (command is RealTouchPeriodicMovementCommand periodic) { if (periodic.Period < minPeriodicDuration) { continue; } } result.Add(command); } result.Sort((a, b) => a.TimeStamp.CompareTo(b.TimeStamp)); return(result); }