Beispiel #1
0
        public void initInputControls(IniData data, ref short[] initialResults)
        {
            chgContext = new ChangerContext();

            resetResults(ref initialResults);

            //------------------------------------------------


            throttleCurveChanger = new MultiRangeChanger(
                new RangeMapping {
                minFrom = 0, maxFrom = 255, minTo = 0, maxTo = 255
            },
                7,
                new int[] {
                // quick and ugly
                int.Parse(data["THROTTLE"]["t0"]),
                int.Parse(data["THROTTLE"]["t1"]),
                int.Parse(data["THROTTLE"]["t2"]),
                int.Parse(data["THROTTLE"]["t3"]),
                int.Parse(data["THROTTLE"]["t4"]),
                int.Parse(data["THROTTLE"]["t5"]),
                int.Parse(data["THROTTLE"]["t6"])
            }
                );


            ThrottleHardLimitChanger = new LimiterChanger(int.Parse(data["SPEED"]["min"]),
                                                          int.Parse(data["SPEED"]["max"])
                                                          );
            throttleLimitChanger = new MultiRangeChanger(new[] {
                new MapRangeChanger(new RangeMapping {
                    minFrom = 0, maxFrom = 127, minTo = ThrottleHardLimitChanger.Min, maxTo = 127
                }),
                new MapRangeChanger(new RangeMapping {
                    minFrom = 128, maxFrom = 255, minTo = 128, maxTo = ThrottleHardLimitChanger.Max
                })
            });


            SteerHardLimitChanger = new LimiterChanger(0, 255);

            brakeChanger = new BrakeChanger(126, int.Parse(data["BRAKE"]["previousMotionThreshold"]), int.Parse(data["BRAKE"]["reversePreviousMotionThreshold"]), int.Parse(data["BRAKE"]["cycles"]));

            //------------------------------------------------

            centrR = new MyRect(0, 0, int.Parse(data["CENTER"]["w"]), int.Parse(data["CENTER"]["h"]));
            bordrR = new MyRect(int.Parse(data["BORDER"]["x"]), int.Parse(data["BORDER"]["y"]), int.Parse(data["BORDER"]["w"]), int.Parse(data["BORDER"]["h"]));

            deadZoneR = new MyRect(0, 0, bordrR.w - 2 * int.Parse(data["DEADZONE"]["x"]), bordrR.h - 2 * int.Parse(data["DEADZONE"]["y"]));

            setArmed(false);

            // TODO make configurable. Reason: poor quality of cheap gamepads
            gamepadRangeMapping = new RangeMapping
            {
                minFrom = -65535,
                maxFrom = 65535,
                minTo   = 0,
                maxTo   = 255
            };



            chgInputSteer = new InputChanger();
            chgSteer      = chgInputSteer
                            //.Chain(new MapRangeChanger(gamepadRangeMapping))
                            .Chain(SteerHardLimitChanger)
            ;
            chgInputThrottle = new InputChanger();
            chgThrottle      = chgInputThrottle
                               //.Chain(new MapRangeChanger(gamepadRangeMapping))
                               .Chain(throttleCurveChanger)
                               .Chain(throttleLimitChanger)
                               .Chain(ThrottleHardLimitChanger)
                               .Chain(new ThrottleStatisticChanger(20))
                               .Chain(brakeChanger)
            ;
        }
Beispiel #2
0
 public IValueChanger Chain(IValueChanger nextChanger)
 {
     nextChanger.SrcChanger = this;
     return(nextChanger);
 }