Пример #1
0
        /// <summary>Moves a slider to the specified position</summary>
        /// <param name="slider">Slider that will be moved</param>
        /// <param name="position">
        ///   Position the slider will be moved to in the range from 0.0 to 1.0
        /// </param>
        public void MoveSlider(ExtendedSliders slider, float position)
        {
            if ((slider & this.availableSliders) != slider)
            {
                throw new ArgumentException(
                          "Not such slider - did you forget to assign the AvailableAxes property?",
                          "slider"
                          );
            }

            switch (slider)
            {
            case ExtendedSliders.Slider1: { this.sliderStates[0] = position; break; }

            case ExtendedSliders.Slider2: { this.sliderStates[1] = position; break; }

            case ExtendedSliders.Velocity1: { this.sliderStates[2] = position; break; }

            case ExtendedSliders.Velocity2: { this.sliderStates[3] = position; break; }

            case ExtendedSliders.Acceleration1: { this.sliderStates[4] = position; break; }

            case ExtendedSliders.Acceleration2: { this.sliderStates[5] = position; break; }

            case ExtendedSliders.Force1: { this.sliderStates[6] = position; break; }

            case ExtendedSliders.Force2: { this.sliderStates[7] = position; break; }

            default: {
                throw new ArgumentException("Invalid slider specified", "slider");
            }
            }
        }
Пример #2
0
        /// <summary>Creates a slider reader for the specified object</summary>
        /// <param name="joystick">Joystick providing the control object</param>
        /// <param name="slider">Slider a reader will be created for</param>
        /// <param name="control">Control description for the axis</param>
        /// <returns>A new slider reader for the specified axis</returns>
        private static ISliderReader createSliderReader(
            Joystick joystick, ExtendedSliders slider, DeviceObjectInstance control
            )
        {
            int id = (int)control.ObjectType;
            ObjectProperties properties = joystick.GetObjectPropertiesById(id);

            int min = properties.LowerRange;
            int max = properties.UpperRange;

            switch (slider)
            {
            case ExtendedSliders.Slider1: {
                return(new SliderReader(0, min, max));
            }

            case ExtendedSliders.Slider2: {
                return(new SliderReader(1, min, max));
            }

            case ExtendedSliders.Velocity1: {
                return(new VelocitySliderReader(0, min, max));
            }

            case ExtendedSliders.Velocity2: {
                return(new VelocitySliderReader(1, min, max));
            }

            case ExtendedSliders.Acceleration1: {
                return(new AccelerationSliderReader(0, min, max));
            }

            case ExtendedSliders.Acceleration2: {
                return(new AccelerationSliderReader(1, min, max));
            }

            case ExtendedSliders.Force1: {
                return(new ForceSliderReader(0, min, max));
            }

            case ExtendedSliders.Force2: {
                return(new ForceSliderReader(1, min, max));
            }

            default: {
                return(null);
            }
            }
        }
Пример #3
0
        /// <summary>Returns the slider index from a value in the slider enumeration</summary>
        /// <param name="slider">Slider enumeration values whose index will be returned</param>
        /// <returns>The index of the specified slider enumeration value</returns>
        private static int indexFromSlider(ExtendedSliders slider)
        {
            switch (slider)
            {
            case ExtendedSliders.Slider1: { return(0); }

            case ExtendedSliders.Slider2: { return(1); }

            case ExtendedSliders.Velocity1: { return(2); }

            case ExtendedSliders.Velocity2: { return(3); }

            case ExtendedSliders.Acceleration1: { return(4); }

            case ExtendedSliders.Acceleration2: { return(5); }

            case ExtendedSliders.Force1: { return(6); }

            case ExtendedSliders.Force2: { return(7); }

            default: { return(-1); }
            }
        }
        /// <summary>Retrieves the state of the specified slider</summary>
        /// <param name="slider">Slider whose state will be retrieved</param>
        /// <returns>The state of the specified slider</returns>
        public float GetSlider(ExtendedSliders slider)
        {
            switch (slider)
            {
            case ExtendedSliders.Slider1: { return(this.Slider1); }

            case ExtendedSliders.Slider2: { return(this.Slider2); }

            case ExtendedSliders.Velocity1: { return(this.VelocitySlider1); }

            case ExtendedSliders.Velocity2: { return(this.VelocitySlider2); }

            case ExtendedSliders.Acceleration1: { return(this.AccelerationSlider1); }

            case ExtendedSliders.Acceleration2: { return(this.AccelerationSlider2); }

            case ExtendedSliders.Force1: { return(this.ForceSlider1); }

            case ExtendedSliders.Force2: { return(this.ForceSlider2); }

            default: { throw new ArgumentOutOfRangeException("slider", "Invalid slider"); }
            }
        }
Пример #5
0
        /// <summary>Initializes a new extended game pas state to the provided values</summary>
        /// <param name="availableAxes">Bit mask of the axes made available in the state</param>
        /// <param name="axes">
        ///   Values of all 24 axes in the order they appear in the ExtendedAxes enumeration
        /// </param>
        /// <param name="availableSliders">Bit mask of the slider provided by the state</param>
        /// <param name="sliders">
        ///   Values of all 8 sliders in the order they appear in the ExtendedSliders enumeration
        /// </param>
        /// <param name="buttonCount">Number of buttons provided by the state</param>
        /// <param name="buttons">State of all 128 buttons in the state</param>
        /// <param name="povCount">Number of Point-of-View controllers in the state</param>
        /// <param name="povs">State of all 4 Point-of-View controllers</param>
        public ExtendedGamePadState(
            ExtendedAxes availableAxes, float[] /*24*/ axes,
            ExtendedSliders availableSliders, float[] /*8*/ sliders,
            int buttonCount, bool[] /*128*/ buttons,
            int povCount, int[] /*4*/ povs
            )
        {
            // Take over all axes
            this.AvailableAxes        = availableAxes;
            this.X                    = axes[0];
            this.Y                    = axes[1];
            this.Z                    = axes[2];
            this.VelocityX            = axes[3];
            this.VelocityY            = axes[4];
            this.VelocityZ            = axes[5];
            this.AccelerationX        = axes[6];
            this.AccelerationY        = axes[7];
            this.AccelerationZ        = axes[8];
            this.ForceX               = axes[9];
            this.ForceY               = axes[10];
            this.ForceZ               = axes[11];
            this.RotationX            = axes[12];
            this.RotationY            = axes[13];
            this.RotationZ            = axes[14];
            this.AngularVelocityX     = axes[15];
            this.AngularVelocityY     = axes[16];
            this.AngularVelocityZ     = axes[17];
            this.AngularAccelerationX = axes[18];
            this.AngularAccelerationY = axes[19];
            this.AngularAccelerationZ = axes[20];
            this.TorqueX              = axes[21];
            this.TorqueY              = axes[22];
            this.TorqueZ              = axes[23];

            // Take over all sliders
            this.AvailableSliders    = availableSliders;
            this.Slider1             = sliders[0];
            this.Slider2             = sliders[1];
            this.VelocitySlider1     = sliders[2];
            this.VelocitySlider2     = sliders[3];
            this.AccelerationSlider1 = sliders[4];
            this.AccelerationSlider2 = sliders[5];
            this.ForceSlider1        = sliders[6];
            this.ForceSlider2        = sliders[7];

            // Take over all buttons
            this.ButtonCount  = buttonCount;
            this.buttonState1 = 0;
            for (int index = 0; index < Math.Min(64, buttonCount); ++index)
            {
                if (buttons[index])
                {
                    this.buttonState1 |= (1UL << index);
                }
            }
            this.buttonState2 = 0;
            for (int index = 0; index < (buttonCount - 64); ++index)
            {
                if (buttons[index + 64])
                {
                    this.buttonState2 |= (1UL << index);
                }
            }

            // Take over all PoV controllers
            this.PovCount = povCount;
            this.Pov1     = povs[0];
            this.Pov2     = povs[1];
            this.Pov3     = povs[2];
            this.Pov4     = povs[3];
        }
 /// <summary>Returns the slider index from a value in the slider enumeration</summary>
 /// <param name="slider">Slider enumeration values whose index will be returned</param>
 /// <returns>The index of the specified slider enumeration value</returns>
 private static int indexFromSlider(ExtendedSliders slider)
 {
     switch (slider) {
     case ExtendedSliders.Slider1: { return 0; }
     case ExtendedSliders.Slider2: { return 1; }
     case ExtendedSliders.Velocity1: { return 2; }
     case ExtendedSliders.Velocity2: { return 3; }
     case ExtendedSliders.Acceleration1: { return 4; }
     case ExtendedSliders.Acceleration2: { return 5; }
     case ExtendedSliders.Force1: { return 6; }
     case ExtendedSliders.Force2: { return 7; }
     default: { return -1; }
       }
 }
        /// <summary>Creates a slider reader for the specified object</summary>
        /// <param name="joystick">Joystick providing the control object</param>
        /// <param name="slider">Slider a reader will be created for</param>
        /// <param name="control">Control description for the axis</param>
        /// <returns>A new slider reader for the specified axis</returns>
        private static ISliderReader createSliderReader(
      Joystick joystick, ExtendedSliders slider, DeviceObjectInstance control
    )
        {
            int id = (int)control.ObjectType;
              ObjectProperties properties = joystick.GetObjectPropertiesById(id);

              int min = properties.LowerRange;
              int max = properties.UpperRange;

              switch (slider) {
            case ExtendedSliders.Slider1: {
              return new SliderReader(0, min, max);
            }
            case ExtendedSliders.Slider2: {
              return new SliderReader(1, min, max);
            }
            case ExtendedSliders.Velocity1: {
              return new VelocitySliderReader(0, min, max);
            }
            case ExtendedSliders.Velocity2: {
              return new VelocitySliderReader(1, min, max);
            }
            case ExtendedSliders.Acceleration1: {
              return new AccelerationSliderReader(0, min, max);
            }
            case ExtendedSliders.Acceleration2: {
              return new AccelerationSliderReader(1, min, max);
            }
            case ExtendedSliders.Force1: {
              return new ForceSliderReader(0, min, max);
            }
            case ExtendedSliders.Force2: {
              return new ForceSliderReader(1, min, max);
            }
            default: {
              return null;
            }
              }
        }
        /// <summary>Maps the sliders of the joystick</summary>
        /// <param name="joystick">Joystick for which sliders are mapped</param>
        private void mapSliders(Joystick joystick)
        {
            IList <DeviceObjectInstance> sliders = joystick.GetObjects(
                ObjectDeviceType.AbsoluteAxis
                );
            var unmappedReaders = new Queue <ISliderReader>();

            for (int index = 0; index < sliders.Count; ++index)
            {
                if (sliders[index].ObjectTypeGuid == ObjectGuid.Slider)
                {
                    ExtendedSliders slider = identifySlider(
                        sliders[index].Aspect, sliders[index].ObjectTypeGuid
                        );

                    // If this slider could not be identified but were still missing one
                    // of the two standard sliders, remember it so we can use it in case
                    // no exact matches are found for sliders 1 and 2.
                    if (slider == 0)
                    {
                        if (unmappedReaders.Count < 2)
                        {
                            unmappedReaders.Enqueue(createSliderReader(joystick, slider, sliders[index]));
                        }
                    }
                    else // Slider was identified, assign it to the next free slot
                    {
                        if ((this.availableSliders & slider) != 0)
                        {
                            ++slider;
                            if ((this.availableSliders & slider) != 0)
                            {
                                slider = 0;
                            }
                        }
                    }

                    // If we identified this slider (exactly or by fallback), build a reader
                    // for it and store it in the appropriate slot.
                    if (slider != 0)
                    {
                        this.availableSliders |= slider;
                        this.sliderReaders[indexFromSlider(slider)] = createSliderReader(
                            joystick, slider, sliders[index]
                            );
                    }
                } // if
            }     // for

            // If sliders 1 and/or 2 are still not provided, use the unidentified
            // sliders we remembered earlier as a fallback solution. These could very
            // well be null, too, in which case the sliders simply aren't there.
            if ((this.sliderReaders[0] == null) && (unmappedReaders.Count > 0))
            {
                this.availableSliders |= ExtendedSliders.Slider1;
                this.sliderReaders[0]  = unmappedReaders.Dequeue();
            }
            if ((this.sliderReaders[1] == null) && (unmappedReaders.Count > 0))
            {
                this.availableSliders |= ExtendedSliders.Slider2;
                this.sliderReaders[1]  = unmappedReaders.Dequeue();
            }
        }
Пример #9
0
        /// <summary>Initializes a new mocked game pad</summary>
        public MockedGamePad()
        {
            this.states = new Queue<ExtendedGamePadState>();
              this.current = new ExtendedGamePadState();

              this.buttonStates = new bool[128];
              this.axisStates = new float[24];
              this.sliderStates = new float[8];
              this.povStates = new int[4] { -1, -1, -1, -1 };

              this.buttonCount = 11;
              this.availableAxes =
            ExtendedAxes.X | ExtendedAxes.Y |
            ExtendedAxes.RotationX | ExtendedAxes.RotationY;
              this.availableSliders =
            ExtendedSliders.Slider1 | ExtendedSliders.Slider2;
              this.povCount = 1;
        }
Пример #10
0
        /// <summary>Moves a slider to the specified position</summary>
        /// <param name="slider">Slider that will be moved</param>
        /// <param name="position">
        ///   Position the slider will be moved to in the range from 0.0 to 1.0
        /// </param>
        public void MoveSlider(ExtendedSliders slider, float position)
        {
            if ((slider & this.availableSliders) != slider) {
            throw new ArgumentException(
              "Not such slider - did you forget to assign the AvailableAxes property?",
              "slider"
            );
              }

              switch (slider) {
            case ExtendedSliders.Slider1: { this.sliderStates[0] = position; break; }
            case ExtendedSliders.Slider2: { this.sliderStates[1] = position; break; }
            case ExtendedSliders.Velocity1: { this.sliderStates[2] = position; break; }
            case ExtendedSliders.Velocity2: { this.sliderStates[3] = position; break; }
            case ExtendedSliders.Acceleration1: { this.sliderStates[4] = position; break; }
            case ExtendedSliders.Acceleration2: { this.sliderStates[5] = position; break; }
            case ExtendedSliders.Force1: { this.sliderStates[6] = position; break; }
            case ExtendedSliders.Force2: { this.sliderStates[7] = position; break; }
            default: {
              throw new ArgumentException("Invalid slider specified", "slider");
            }
              }
        }
Пример #11
0
        /// <summary>Maps the sliders of the joystick</summary>
        /// <param name="joystick">Joystick for which sliders are mapped</param>
        private void mapSliders(Joystick joystick)
        {
            IList<DeviceObjectInstance> sliders = joystick.GetObjects(
            ObjectDeviceType.AbsoluteAxis
              );
              var unmappedReaders = new Queue<ISliderReader>();

              for (int index = 0; index < sliders.Count; ++index) {
            if (sliders[index].ObjectTypeGuid == ObjectGuid.Slider) {
              ExtendedSliders slider = identifySlider(
            sliders[index].Aspect, sliders[index].ObjectTypeGuid
              );

              // If this slider could not be identified but were still missing one
              // of the two standard sliders, remember it so we can use it in case
              // no exact matches are found for sliders 1 and 2.
              if (slider == 0) {
            if (unmappedReaders.Count < 2) {
              unmappedReaders.Enqueue(createSliderReader(joystick, slider, sliders[index]));
            }
              } else { // Slider was identified, assign it to the next free slot
            if ((this.availableSliders & slider) != 0) {
              ++slider;
              if ((this.availableSliders & slider) != 0) {
                slider = 0;
              }
            }
              }

              // If we identified this slider (exactly or by fallback), build a reader
              // for it and store it in the appropriate slot.
              if (slider != 0) {
            this.availableSliders |= slider;
            this.sliderReaders[indexFromSlider(slider)] = createSliderReader(
              joystick, slider, sliders[index]
            );
              }
            } // if
              } // for

              // If sliders 1 and/or 2 are still not provided, use the unidentified
              // sliders we remembered earlier as a fallback solution. These could very
              // well be null, too, in which case the sliders simply aren't there.
              if ((this.sliderReaders[0] == null) && (unmappedReaders.Count > 0)) {
            this.availableSliders |= ExtendedSliders.Slider1;
            this.sliderReaders[0] = unmappedReaders.Dequeue();
              }
              if ((this.sliderReaders[1] == null) && (unmappedReaders.Count > 0)) {
            this.availableSliders |= ExtendedSliders.Slider2;
            this.sliderReaders[1] = unmappedReaders.Dequeue();
              }
        }