コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }