Exemplo n.º 1
0
    public void ConstructorTakesOverAxisStates() {
      var axes = new float[24];
      var sliders = new float[8];
      var buttons = new bool[128];
      var povs = new int[4];

      int axisIndex = 0;
      foreach (ExtendedAxes axis in Enum.GetValues(typeof(ExtendedAxes))) {
        Array.Clear(axes, 0, 24);
        axes[axisIndex] = 12.34f;

        ExtendedGamePadState state = new ExtendedGamePadState(
          axis, axes,
          0, sliders,
          0, buttons,
          0, povs
        );

        // Only the provided axis should be reported as available by the state
        Assert.AreEqual(state.AvailableAxes, axis);

        // Ensure only the provided axis has the value assigned
        foreach (ExtendedAxes axis2 in Enum.GetValues(typeof(ExtendedAxes))) {
          if (axis2 == axis) {
            Assert.AreEqual(12.34f, state.GetAxis(axis2));
          } else {
            Assert.AreEqual(0.0f, state.GetAxis(axis2));
          }
        }

        ++axisIndex;
      }
    }
Exemplo n.º 2
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;
        }
    public void TestExtendedGamePadStateConversion() {
      requireAttachedJoystick();

      var converter = new DirectInputConverter(this.joystick);

      JoystickState joystickState = this.joystick.GetCurrentState();
      var gamePadState = new ExtendedGamePadState(converter, ref joystickState);
    }
Exemplo n.º 4
0
        /// <summary>Generates events for any changes to the button states</summary>
        /// <param name="previous">Previous state of the game pad to compare against</param>
        /// <param name="current">Current state of the game pad</param>
        private void generateEvents(
      ref ExtendedGamePadState previous, ref ExtendedGamePadState current
    )
        {
            ulong previous1, previous2;
              previous.InternalGetButtons(out previous1, out previous2);
              ulong current1, current2;
              current.InternalGetButtons(out current1, out current2);

              // Determine which buttons have changed state since the last update
              ulong changeMask1 = previous1 ^ current1;
              ulong changeMask2 = previous2 ^ current2;

              // Report any buttons that have been pressed
              ulong pressed1 = current1 & changeMask1;
              ulong pressed2 = current2 & changeMask2;
              if ((pressed1 != 0) || (pressed2 != 0)) {
            Buttons pressed = ExtendedGamePadState.ButtonsFromExtendedButtons(pressed1);
            if (pressed != 0) {
              OnButtonPressed(pressed);
            }

            OnExtendedButtonPressed(pressed1, pressed2);
              }

              // Report any buttons that have been released
              ulong released1 = ~current1 & changeMask1;
              ulong released2 = ~current2 & changeMask2;
              if ((released1 != 0) || (released2 != 0)) {
            Buttons released = ExtendedGamePadState.ButtonsFromExtendedButtons(released1);
            if (released != 0) {
              OnButtonReleased(released);
            }

            OnExtendedButtonReleased(released1, released2);
              }
        }
Exemplo n.º 5
0
        /// <summary>Updates the state of the input device</summary>
        /// <remarks>
        ///   <para>
        ///     If this method is called with no snapshots in the queue, it will take
        ///     an immediate snapshot and make it the current state. This way, you
        ///     can use the input devices without caring for the snapshot system if
        ///     you wish.
        ///   </para>
        ///   <para>
        ///     If this method is called while one or more snapshots are waiting in
        ///     the queue, this method takes the next snapshot from the queue and makes
        ///     it the current state.
        ///   </para>
        /// </remarks>
        public override void Update()
        {
            ExtendedGamePadState previous = this.current;

              if (this.states.Count == 0) {
            this.current = buildState();
              } else {
            this.current = this.states.Dequeue();
              }

              generateEvents(ref previous, ref this.current);
        }
Exemplo n.º 6
0
    public void ConstructorTakesOverAxisCount() {
      var axes = new float[24];
      var sliders = new float[8];
      var buttons = new bool[128];
      var povs = new int[4];

      for (int count = 0; count < 24; ++count) {
        int axisBits = 0;
        for (int axisIndex = 0; axisIndex < count; ++axisIndex) {
          axisBits |= (1 << axisIndex);
        }

        ExtendedGamePadState state = new ExtendedGamePadState(
          (ExtendedAxes)axisBits, axes,
          0, sliders,
          0, buttons,
          0, povs
        );

        // Only the provided axes should be reported as available by the state
        Assert.AreEqual(state.AvailableAxes, (ExtendedAxes)axisBits);
        Assert.AreEqual(count, state.AxisCount);
      }
    }
Exemplo n.º 7
0
    public void ExtendedGamePadStateCanBeConstructedFromGamePadState(Buttons button) {
      var state = new GamePadState(
        new Vector2(0.12f, 0.34f),
        new Vector2(0.56f, 0.78f),
        0.1234f, 0.5678f,
        button
      );
      var extendedState = new ExtendedGamePadState(ref state);

      Assert.AreEqual(0.12f, extendedState.GetAxis(ExtendedAxes.X));
      Assert.AreEqual(0.34f, extendedState.GetAxis(ExtendedAxes.Y));
      Assert.AreEqual(0.56f, extendedState.GetAxis(ExtendedAxes.RotationX));
      Assert.AreEqual(0.78f, extendedState.GetAxis(ExtendedAxes.RotationY));
      Assert.AreEqual(0.1234f, extendedState.GetSlider(ExtendedSliders.Slider1));
      Assert.AreEqual(0.5678f, extendedState.GetSlider(ExtendedSliders.Slider2));

      switch (button) {
        case Buttons.DPadUp: {
          Assert.AreEqual(0, extendedState.GetPov(0));
          break;
        }
        case Buttons.DPadRight: {
          Assert.AreEqual(9000, extendedState.GetPov(0));
          break;
        }
        case Buttons.DPadDown: {
          Assert.AreEqual(18000, extendedState.GetPov(0));
          break;
        }
        case Buttons.DPadLeft: {
          Assert.AreEqual(27000, extendedState.GetPov(0));
          break;
        }
        default: {
          Assert.IsTrue(
            extendedState.IsButtonDown(
              Array.IndexOf(ExtendedGamePadState.ButtonOrder, button)
            )
          );
          break;
        }
      }
    }
Exemplo n.º 8
0
 public void DefaultConstructorCanBeUsed() {
   var state = new ExtendedGamePadState();
   Assert.IsNotNull(state); // nonsense, avoids compiler warning
 }
Exemplo n.º 9
0
 public void AccessingInvalidButtonsCausesException(int buttonIndex) {
   var state = new ExtendedGamePadState();
   Assert.Throws<ArgumentOutOfRangeException>(
     delegate() { state.IsButtonDown(buttonIndex); }
   );
   Assert.Throws<ArgumentOutOfRangeException>(
     delegate() { state.IsButtonUp(buttonIndex); }
   );
 }
Exemplo n.º 10
0
 public void InvalidPovIndexCausesException(int povIndex) {
   var state = new ExtendedGamePadState();
   Assert.Throws<ArgumentOutOfRangeException>(
     delegate() { state.GetPov(povIndex); }
   );
 }
Exemplo n.º 11
0
 public void AccessingInvalidSliderCausesException() {
   var state = new ExtendedGamePadState();
   Assert.Throws<ArgumentOutOfRangeException>(
     delegate() {
       state.GetSlider(ExtendedSliders.Slider1 | ExtendedSliders.Slider2);
     }
   );
 }
Exemplo n.º 12
0
 public void AccessingInvalidAxisCausesException() {
   var state = new ExtendedGamePadState();
   Assert.Throws<ArgumentOutOfRangeException>(
     delegate() {
       state.GetAxis(ExtendedAxes.X | ExtendedAxes.Y);
     }
   );
 }
Exemplo n.º 13
0
    public void ConstructorTakesOverPovControllerStates() {
      var axes = new float[24];
      var sliders = new float[8];
      var buttons = new bool[128];
      var povs = new int[4];

      for (int povIndex = 0; povIndex < 4; ++povIndex) {
        Array.Clear(povs, 0, 4);
        povs[povIndex] = 12345;

        var state = new ExtendedGamePadState(
          0, axes,
          0, sliders,
          0, buttons,
          povIndex + 1, povs
        );

        // The specified number of PoV controllers should be available
        Assert.AreEqual(state.PovCount, povIndex + 1);

        // Ensure only the provided pov has the value assigned
        for (int povIndex2 = 0; povIndex2 < 4; ++povIndex2) {
          if (povIndex2 == povIndex) {
            Assert.AreEqual(12345, state.GetPov(povIndex2));
          } else {
            Assert.AreEqual(0, state.GetPov(povIndex2));
          }
        } // for
      } // for
    }
Exemplo n.º 14
0
    public void ConstuctorTakesOverButtonStates() {
      var axes = new float[24];
      var sliders = new float[8];
      var buttons = new bool[128];
      var povs = new int[4];

      for (int buttonIndex = 0; buttonIndex < 128; ++buttonIndex) {
        Array.Clear(buttons, 0, 128);
        buttons[buttonIndex] = true;

        ExtendedGamePadState state = new ExtendedGamePadState(
          0, axes,
          0, sliders,
          buttonIndex + 1, buttons,
          0, povs
        );

        // The specified number of buttons should be available
        Assert.AreEqual(state.ButtonCount, buttonIndex + 1);

        // Ensure only the provided button is reported as pressed
        for (int buttonIndex2 = 0; buttonIndex2 < 128; ++buttonIndex2) {
          if (buttonIndex2 == buttonIndex) {
            Assert.AreEqual(ButtonState.Pressed, state.GetButton(buttonIndex2));
            Assert.IsTrue(state.IsButtonDown(buttonIndex2));
            Assert.IsFalse(state.IsButtonUp(buttonIndex2));
          } else {
            Assert.AreEqual(ButtonState.Released, state.GetButton(buttonIndex2));
            Assert.IsFalse(state.IsButtonDown(buttonIndex2));
            Assert.IsTrue(state.IsButtonUp(buttonIndex2));
          }
        } // for
      } // for
    }
Exemplo n.º 15
0
    public void ConstructorTakesOverSliderStates() {
      var axes = new float[24];
      var sliders = new float[8];
      var buttons = new bool[128];
      var povs = new int[4];

      int sliderIndex = 0;
      foreach (ExtendedSliders slider in Enum.GetValues(typeof(ExtendedSliders))) {
        Array.Clear(sliders, 0, 8);
        sliders[sliderIndex] = 12.34f;

        ExtendedGamePadState state = new ExtendedGamePadState(
          0, axes,
          slider, sliders,
          0, buttons,
          0, povs
        );

        // Only the provided slider should be reported as available by the state
        Assert.AreEqual(state.AvailableSliders, slider);

        // Ensure only the provided slider has the value assigned
        foreach (ExtendedSliders slider2 in Enum.GetValues(typeof(ExtendedSliders))) {
          if (slider2 == slider) {
            Assert.AreEqual(12.34f, state.GetSlider(slider2));
          } else {
            Assert.AreEqual(0.0f, state.GetSlider(slider2));
          }
        }

        ++sliderIndex;
      }
    }