/** * This updates the state of the device and triggers events * to any registered listeners. **/ public void Update() { try { XInputState gpState; XInputMethods.GetState(deviceID, out gpState); XInputGamepad gp = gpState.Gamepad; // If previously disconnected, notify of connect if (!isConnected && OnConnect != null) { isConnected = true; OnConnect(this, new GamepadEventArgs(deviceID, GamepadState.Connected)); } if (isConnected) { // A Button // Check to see if anything changed if (!(lastAButtonState == gp.IsAButtonDown)) { GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.A, gp.IsAButtonDown); if (gp.IsAButtonDown) // If button changed to press state { if (OnAButtonPress != null) OnAButtonPress(this, btnEvt); } else // If button changed to release state { if (OnAButtonRelease != null) OnAButtonRelease(this, btnEvt); } lastAButtonState = gp.IsAButtonDown; } // B Button // Check to see if anything changed if (!(lastBButtonState == gp.IsBButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.B, gp.IsBButtonDown); if (gp.IsBButtonDown) // If button changed to press state { if (OnBButtonPress != null) OnBButtonPress(this, btnEvt); } else // If button changed to release state { if (OnBButtonRelease != null) OnBButtonRelease(this, btnEvt); } lastBButtonState = gp.IsBButtonDown; } // X Button // Check to see if anything changed if (!(lastXButtonState == gp.IsXButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.X, gp.IsXButtonDown); if (gp.IsXButtonDown) // If button changed to press state { if (OnXButtonPress != null) OnXButtonPress(this, btnEvt); } else // If button changed to release state { if (OnXButtonRelease != null) OnXButtonRelease(this, btnEvt); } lastXButtonState = gp.IsXButtonDown; } // Y Button // Check to see if anything changed if (!(lastYButtonState == gp.IsYButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Y, gp.IsYButtonDown); if (gp.IsYButtonDown) // If button changed to press state { if (OnYButtonPress != null) OnYButtonPress(this, btnEvt); } else // If button changed to release state { if (OnYButtonRelease != null) OnYButtonRelease(this, btnEvt); } lastYButtonState = gp.IsYButtonDown; } // Back Button // Check to see if anything changed if (!(lastBackButtonState == gp.IsBackButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Back, gp.IsBackButtonDown); if (gp.IsBackButtonDown) // If button changed to press state { if (OnBackButtonPress != null) OnBackButtonPress(this, btnEvt); } else // If button changed to release state { if (OnBackButtonRelease != null) OnBackButtonRelease(this, btnEvt); } lastBackButtonState = gp.IsBackButtonDown; } // Start Button // Check to see if anything changed if (!(lastStartButtonState == gp.IsStartButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Start, gp.IsStartButtonDown); if (gp.IsStartButtonDown) // If button changed to press state { if (OnStartButtonPress != null) OnStartButtonPress(this, btnEvt); } else // If button changed to release state { if (OnStartButtonRelease != null) OnStartButtonRelease(this, btnEvt); } lastStartButtonState = gp.IsStartButtonDown; } // Left Thumb Button // Check to see if anything changed if (!(lastLeftThumbButtonState == gp.IsLeftThumbButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.LeftThumb, gp.IsLeftThumbButtonDown); if (gp.IsLeftThumbButtonDown) // If button changed to press state { if (OnLeftThumbButtonPress != null) OnLeftThumbButtonPress(this, btnEvt); } else // If button changed to release state { if (OnLeftThumbButtonRelease != null) OnLeftThumbButtonRelease(this, btnEvt); } lastLeftThumbButtonState = gp.IsLeftThumbButtonDown; } // Right Thumb Button // Check to see if anything changed if (!(lastRightThumbButtonState == gp.IsRightThumbButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.RightThumb, gp.IsRightThumbButtonDown); if (gp.IsRightThumbButtonDown) // If button changed to press state { if (OnRightThumbButtonPress != null) OnRightThumbButtonPress(this, btnEvt); } else // If button changed to release state { if (OnRightThumbButtonRelease != null) OnRightThumbButtonRelease(this, btnEvt); } lastRightThumbButtonState = gp.IsRightThumbButtonDown; } // Left Shoulder Button // Check to see if anything changed if (!(lastLeftShoulderButtonState == gp.IsLeftShoulderButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.LeftShoulder, gp.IsLeftShoulderButtonDown); if (gp.IsLeftShoulderButtonDown) // If button changed to press state { if (OnLeftShoulderButtonPress != null) OnLeftShoulderButtonPress(this, btnEvt); } else // If button changed to release state { if (OnLeftShoulderButtonRelease != null) OnLeftShoulderButtonRelease(this, btnEvt); } lastLeftShoulderButtonState = gp.IsLeftShoulderButtonDown; } // Right Shoulder Button // Check to see if anything changed if (!(lastRightShoulderButtonState == gp.IsRightShoulderButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.RightShoulder, gp.IsRightShoulderButtonDown); if (gp.IsRightShoulderButtonDown) // If button changed to press state { if (OnRightShoulderButtonPress != null) OnRightShoulderButtonPress(this, btnEvt); } else // If button changed to release state { if (OnRightShoulderButtonRelease != null) OnRightShoulderButtonRelease(this, btnEvt); } lastRightShoulderButtonState = gp.IsRightShoulderButtonDown; } // DPad // Check to see if DPad state has changed. GamepadButtons tmpButtons = (GamepadButtons)gp.Buttons; GamepadButtons dpNewState = (GamepadButtons)((int)tmpButtons % 0x10); // Remove other button states if (dpNewState != _lastDPadState) // A change has occured { GamepadDPadEventArgs padEvt = new GamepadDPadEventArgs(deviceID, dpNewState); if (dpNewState == 0) // DPad has been released { if (OnDPadRelease != null) if(!(_RightThumbMoving || _LeftThumbMoving)) { OnDPadRelease(this, padEvt); } } else if (_lastDPadState == 0) // DPad has been pressed { if (OnDPadPress != null) { if (!(_RightThumbMoving || _LeftThumbMoving)) { OnDPadPress(this, padEvt); } } } if (OnDPadChange != null) OnDPadChange(this, padEvt); _lastDPadState = dpNewState; } else if ((_lastDPadState == GamepadButtons.DPadUp) || (_lastDPadState == GamepadButtons.DPadDown)) // If the button is pressed { if (!(_RightThumbMoving || _LeftThumbMoving)) { GamepadDPadEventArgs padEvt = new GamepadDPadEventArgs(deviceID, dpNewState); OnDPadPress(this, padEvt); } } // Left Trigger // Check to see if left trigger has changed. if (lastLeftTrigger != gp.LeftTrigger) // A change has occured { GamepadTriggerEventArgs trigEvt = new GamepadTriggerEventArgs(deviceID, GamepadTriggers.Left, gp.LeftTrigger); if (!leftTriggerPressed) // Trigger was pressed { leftTriggerPressed = true; if (OnLeftTriggerPress != null) OnLeftTriggerPress(this, trigEvt); } else if (gp.LeftTrigger == 0) // Trigger was released { if (OnLeftTriggerRelease != null) OnLeftTriggerRelease(this, trigEvt); leftTriggerPressed = false; } if (OnLeftTriggerChange != null) OnLeftTriggerChange(this, trigEvt); lastLeftTrigger = gp.LeftTrigger; } // Right Trigger // Check to see if right trigger has changed. if (lastRightTrigger != gp.RightTrigger) // A change has occured { GamepadTriggerEventArgs trigEvt = new GamepadTriggerEventArgs(deviceID, GamepadTriggers.Right, gp.RightTrigger); if (!rightTriggerPressed) // Trigger was pressed { rightTriggerPressed = true; if (OnRightTriggerPress != null) OnRightTriggerPress(this, trigEvt); } else if (gp.RightTrigger == 0) // Trigger was released { if (OnRightTriggerRelease != null) OnRightTriggerRelease(this, trigEvt); rightTriggerPressed = false; } if (OnRightTriggerChange != null) OnRightTriggerChange(this, trigEvt); lastRightTrigger = gp.RightTrigger; } // Left Thumb Joystick GamepadThumbEventArgs joyEvt = new GamepadThumbEventArgs(deviceID, GamepadThumbs.Left, gp.LeftThumbX, gp.LeftThumbY, gp.IsLeftThumbButtonDown); if (!isThumbPostionInsideRadius(GamepadButtons.LeftThumb, gp.LeftThumbX, gp.LeftThumbY, 8000.0)) { if (OnLeftThumbUpdate != null) { if (_RightThumbMoving) { _Move3Axis = true; OnLeftThumbUpdate(this, joyEvt); _LeftThumbMoving = true; } else { _Move3Axis = false; OnLeftThumbUpdate(this, joyEvt); _LeftThumbMoving = true; } } } else { if (IsNoButtonHeldDown(gp)) { if (OnThumbBackInsideRadius != null) OnThumbBackInsideRadius(this, joyEvt); _LeftThumbMoving = false; } } // Right Thumb Joystick GamepadThumbEventArgs joyEvt1 = new GamepadThumbEventArgs(deviceID, GamepadThumbs.Right, gp.RightThumbX, gp.RightThumbY, gp.IsRightThumbButtonDown); if (!isThumbPostionInsideRadius(GamepadButtons.RightThumb, gp.RightThumbX, gp.RightThumbY, 8000.0)) { if (OnRightThumbUpdate != null) { if (!gp.IsDPadUpButtonDown && !gp.IsDPadDownButtonDown && !_LeftThumbMoving) { _Move3Axis = false; OnRightThumbUpdate(this, joyEvt1); _RightThumbMoving = true; } else { _Move3Axis = true; OnRightThumbUpdate(this, joyEvt1); _RightThumbMoving = true; } } } else { if ( (IsNoButtonHeldDown(gp) && !_LeftThumbMoving) ) { if (OnThumbBackInsideRadius != null) OnThumbBackInsideRadius(this, joyEvt1); _RightThumbMoving = false; } } // Update complete } } catch (Win32Exception e) { if (e.NativeErrorCode == 1167) // This is a disconnect error { if (OnDisconnect != null) OnDisconnect(this, new GamepadEventArgs(deviceID, GamepadState.Disconnected)); isConnected = false; } else { throw e; // Unknown error, rethrow } } }
/** * This updates the state of the device and triggers events * to any registered listeners. **/ public void Update() { try { XInputState gpState; XInputMethods.GetState(deviceID, out gpState); XInputGamepad gp = gpState.Gamepad; // If previously disconnected, notify of connect if (!isConnected && OnConnect != null) { isConnected = true; OnConnect(this, new GamepadEventArgs(deviceID, GamepadState.Connected)); } if (isConnected) { // A Button // Check to see if anything changed if (!(lastAButtonState == gp.IsAButtonDown)) { GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.A, gp.IsAButtonDown); if (gp.IsAButtonDown) // If button changed to press state { if (OnAButtonPress != null) { OnAButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnAButtonRelease != null) { OnAButtonRelease(this, btnEvt); } } lastAButtonState = gp.IsAButtonDown; } // B Button // Check to see if anything changed if (!(lastBButtonState == gp.IsBButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.B, gp.IsBButtonDown); if (gp.IsBButtonDown) // If button changed to press state { if (OnBButtonPress != null) { OnBButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnBButtonRelease != null) { OnBButtonRelease(this, btnEvt); } } lastBButtonState = gp.IsBButtonDown; } // X Button // Check to see if anything changed if (!(lastXButtonState == gp.IsXButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.X, gp.IsXButtonDown); if (gp.IsXButtonDown) // If button changed to press state { if (OnXButtonPress != null) { OnXButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnXButtonRelease != null) { OnXButtonRelease(this, btnEvt); } } lastXButtonState = gp.IsXButtonDown; } // Y Button // Check to see if anything changed if (!(lastYButtonState == gp.IsYButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Y, gp.IsYButtonDown); if (gp.IsYButtonDown) // If button changed to press state { if (OnYButtonPress != null) { OnYButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnYButtonRelease != null) { OnYButtonRelease(this, btnEvt); } } lastYButtonState = gp.IsYButtonDown; } // Back Button // Check to see if anything changed if (!(lastBackButtonState == gp.IsBackButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Back, gp.IsBackButtonDown); if (gp.IsBackButtonDown) // If button changed to press state { if (OnBackButtonPress != null) { OnBackButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnBackButtonRelease != null) { OnBackButtonRelease(this, btnEvt); } } lastBackButtonState = gp.IsBackButtonDown; } // Start Button // Check to see if anything changed if (!(lastStartButtonState == gp.IsStartButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.Start, gp.IsStartButtonDown); if (gp.IsStartButtonDown) // If button changed to press state { if (OnStartButtonPress != null) { OnStartButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnStartButtonRelease != null) { OnStartButtonRelease(this, btnEvt); } } lastStartButtonState = gp.IsStartButtonDown; } // Left Thumb Button // Check to see if anything changed if (!(lastLeftThumbButtonState == gp.IsLeftThumbButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.LeftThumb, gp.IsLeftThumbButtonDown); if (gp.IsLeftThumbButtonDown) // If button changed to press state { if (OnLeftThumbButtonPress != null) { OnLeftThumbButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnLeftThumbButtonRelease != null) { OnLeftThumbButtonRelease(this, btnEvt); } } lastLeftThumbButtonState = gp.IsLeftThumbButtonDown; } // Right Thumb Button // Check to see if anything changed if (!(lastRightThumbButtonState == gp.IsRightThumbButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.RightThumb, gp.IsRightThumbButtonDown); if (gp.IsRightThumbButtonDown) // If button changed to press state { if (OnRightThumbButtonPress != null) { OnRightThumbButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnRightThumbButtonRelease != null) { OnRightThumbButtonRelease(this, btnEvt); } } lastRightThumbButtonState = gp.IsRightThumbButtonDown; } // Left Shoulder Button // Check to see if anything changed if (!(lastLeftShoulderButtonState == gp.IsLeftShoulderButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.LeftShoulder, gp.IsLeftShoulderButtonDown); if (gp.IsLeftShoulderButtonDown) // If button changed to press state { if (OnLeftShoulderButtonPress != null) { OnLeftShoulderButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnLeftShoulderButtonRelease != null) { OnLeftShoulderButtonRelease(this, btnEvt); } } lastLeftShoulderButtonState = gp.IsLeftShoulderButtonDown; } // Right Shoulder Button // Check to see if anything changed if (!(lastRightShoulderButtonState == gp.IsRightShoulderButtonDown)) { // Something has changed, lets dispatch events GamepadButtonEventArgs btnEvt = new GamepadButtonEventArgs(deviceID, GamepadButtons.RightShoulder, gp.IsRightShoulderButtonDown); if (gp.IsRightShoulderButtonDown) // If button changed to press state { if (OnRightShoulderButtonPress != null) { OnRightShoulderButtonPress(this, btnEvt); } } else // If button changed to release state { if (OnRightShoulderButtonRelease != null) { OnRightShoulderButtonRelease(this, btnEvt); } } lastRightShoulderButtonState = gp.IsRightShoulderButtonDown; } // DPad // Check to see if DPad state has changed. GamepadButtons tmpButtons = (GamepadButtons)gp.Buttons; GamepadButtons dpNewState = (GamepadButtons)((int)tmpButtons % 0x10); // Remove other button states if (dpNewState != _lastDPadState) // A change has occured { GamepadDPadEventArgs padEvt = new GamepadDPadEventArgs(deviceID, dpNewState); if (dpNewState == 0) // DPad has been released { if (OnDPadRelease != null) { if (!(_RightThumbMoving || _LeftThumbMoving)) { OnDPadRelease(this, padEvt); } } } else if (_lastDPadState == 0) // DPad has been pressed { if (OnDPadPress != null) { if (!(_RightThumbMoving || _LeftThumbMoving)) { OnDPadPress(this, padEvt); } } } if (OnDPadChange != null) { OnDPadChange(this, padEvt); } _lastDPadState = dpNewState; } else if ((_lastDPadState == GamepadButtons.DPadUp) || (_lastDPadState == GamepadButtons.DPadDown)) // If the button is pressed { if (!(_RightThumbMoving || _LeftThumbMoving)) { GamepadDPadEventArgs padEvt = new GamepadDPadEventArgs(deviceID, dpNewState); OnDPadPress(this, padEvt); } } // Left Trigger // Check to see if left trigger has changed. if (lastLeftTrigger != gp.LeftTrigger) // A change has occured { GamepadTriggerEventArgs trigEvt = new GamepadTriggerEventArgs(deviceID, GamepadTriggers.Left, gp.LeftTrigger); if (!leftTriggerPressed) // Trigger was pressed { leftTriggerPressed = true; if (OnLeftTriggerPress != null) { OnLeftTriggerPress(this, trigEvt); } } else if (gp.LeftTrigger == 0) // Trigger was released { if (OnLeftTriggerRelease != null) { OnLeftTriggerRelease(this, trigEvt); } leftTriggerPressed = false; } if (OnLeftTriggerChange != null) { OnLeftTriggerChange(this, trigEvt); } lastLeftTrigger = gp.LeftTrigger; } // Right Trigger // Check to see if right trigger has changed. if (lastRightTrigger != gp.RightTrigger) // A change has occured { GamepadTriggerEventArgs trigEvt = new GamepadTriggerEventArgs(deviceID, GamepadTriggers.Right, gp.RightTrigger); if (!rightTriggerPressed) // Trigger was pressed { rightTriggerPressed = true; if (OnRightTriggerPress != null) { OnRightTriggerPress(this, trigEvt); } } else if (gp.RightTrigger == 0) // Trigger was released { if (OnRightTriggerRelease != null) { OnRightTriggerRelease(this, trigEvt); } rightTriggerPressed = false; } if (OnRightTriggerChange != null) { OnRightTriggerChange(this, trigEvt); } lastRightTrigger = gp.RightTrigger; } // Left Thumb Joystick GamepadThumbEventArgs joyEvt = new GamepadThumbEventArgs(deviceID, GamepadThumbs.Left, gp.LeftThumbX, gp.LeftThumbY, gp.IsLeftThumbButtonDown); if (!isThumbPostionInsideRadius(GamepadButtons.LeftThumb, gp.LeftThumbX, gp.LeftThumbY, 8000.0)) { if (OnLeftThumbUpdate != null) { if (_RightThumbMoving) { _Move3Axis = true; OnLeftThumbUpdate(this, joyEvt); _LeftThumbMoving = true; } else { _Move3Axis = false; OnLeftThumbUpdate(this, joyEvt); _LeftThumbMoving = true; } } } else { if (IsNoButtonHeldDown(gp)) { if (OnThumbBackInsideRadius != null) { OnThumbBackInsideRadius(this, joyEvt); } _LeftThumbMoving = false; } } // Right Thumb Joystick GamepadThumbEventArgs joyEvt1 = new GamepadThumbEventArgs(deviceID, GamepadThumbs.Right, gp.RightThumbX, gp.RightThumbY, gp.IsRightThumbButtonDown); if (!isThumbPostionInsideRadius(GamepadButtons.RightThumb, gp.RightThumbX, gp.RightThumbY, 8000.0)) { if (OnRightThumbUpdate != null) { if (!gp.IsDPadUpButtonDown && !gp.IsDPadDownButtonDown && !_LeftThumbMoving) { _Move3Axis = false; OnRightThumbUpdate(this, joyEvt1); _RightThumbMoving = true; } else { _Move3Axis = true; OnRightThumbUpdate(this, joyEvt1); _RightThumbMoving = true; } } } else { if ((IsNoButtonHeldDown(gp) && !_LeftThumbMoving)) { if (OnThumbBackInsideRadius != null) { OnThumbBackInsideRadius(this, joyEvt1); } _RightThumbMoving = false; } } // Update complete } } catch (Win32Exception e) { if (e.NativeErrorCode == 1167) // This is a disconnect error { if (OnDisconnect != null) { OnDisconnect(this, new GamepadEventArgs(deviceID, GamepadState.Disconnected)); } isConnected = false; } else { throw e; // Unknown error, rethrow } } }
private void OnThumbBackInsideRadius(object sender, GamepadThumbEventArgs evt) { if (evt.Thumb == GamepadThumbs.Right) { myStage.Stop(); Text = "(" + evt.XPosition + "," + evt.YPosition + ")"; } }
private void OnRightThumbUpdate(object sender, GamepadThumbEventArgs evt) { if (evt.Thumb == GamepadThumbs.Right) { double x, y, z; double rightThumbCurrentRadius = 0.0; double rightThumbRadius = 0.0; double rightThumbX = 0.0; double rightThumbY = 0.0; double deltaRadius = 0.0, deltax = 0.0, deltay = 0.0, deltaz=0.05;; double magnitude = 0.0; double deltapos = 0.05; gamepad.GetThumbRadius(GamepadButtons.RightThumb, ref rightThumbRadius); gamepad.GetThumbXY(GamepadButtons.RightThumb, ref rightThumbX, ref rightThumbY); Gamepad gp = (Gamepad)sender; if (gp._ZdirectionDown) { deltaz = -deltaz; } rightThumbCurrentRadius = gamepad.CalculateMagnitude((double)evt.XPosition, (double)evt.YPosition); deltaRadius = gamepad.CalculatePosDifference(rightThumbRadius, rightThumbCurrentRadius, 4000.0); if (deltaRadius <= 0.0) { return; } deltax = gamepad.CalculatePosDifference((double)evt.XPosition, rightThumbX, 4000); deltay = gamepad.CalculatePosDifference((double)evt.YPosition, rightThumbX, 4000); magnitude = gamepad.CalculateMagnitude(deltax, deltay); deltax = deltax / magnitude; deltay = deltay / magnitude; if (Math.Abs(deltax) >= 0.9) { deltay = 0.0; } if (Math.Abs(deltay) >= 0.9) { deltax = 0.0; } deltax = deltax * deltapos; deltay = deltay * deltapos; myStage.GetPos(out x, out y, out z); if (gp._Move3Axis) { myStage.MoveTo(x + deltax, y + deltay, z + deltaz, false); } else { myStage.MoveTo(x + deltax, y + deltay, z, false); } Text = "(" + evt.XPosition + "," + evt.YPosition + ")"; } }
private void OnLeftThumbUpdate(object sender, GamepadThumbEventArgs evt) { if (evt.Thumb == GamepadThumbs.Left) { double x, y, z; double leftThumbCurrentRadius = 0.0; double leftThumbRadius = 0.0; double leftThumbX = 0.0; double leftThumbY = 0.0; double deltaRadius = 0.0, deltax = 0.0, deltay = 0.0, deltaz=0.02; double magnitude = 0.0; double deltapos = 0.2; Gamepad gp = (Gamepad)sender; gamepad.GetThumbRadius(GamepadButtons.LeftThumb, ref leftThumbRadius); gamepad.GetThumbXY(GamepadButtons.LeftThumb, ref leftThumbX, ref leftThumbY); leftThumbCurrentRadius = gamepad.CalculateMagnitude((double)evt.XPosition, (double)evt.YPosition); deltaRadius = gamepad.CalculatePosDifference(leftThumbRadius, leftThumbCurrentRadius, 5000); if (deltaRadius <= 0.0) { return; } deltax = gamepad.CalculatePosDifference((double)evt.XPosition, leftThumbX, 5000); deltay = gamepad.CalculatePosDifference((double)evt.YPosition, leftThumbX, 5000); magnitude = gamepad.CalculateMagnitude(deltax, deltay); deltax = deltax / magnitude; deltay = deltay / magnitude; if (Math.Abs(deltax) > 0.0) { return; } deltax = deltax * deltapos; deltay = deltay * deltapos; if (Math.Abs(deltax) >= 0.5) { deltay = 0.0; } if (Math.Abs(deltay) >= 0.5) { deltax = 0.0; } if (deltay > 0) { deltaz = -0.05; gp._ZdirectionDown = true; } if (deltay < 0) { deltaz = 0.05; gp._ZdirectionDown = false; } myStage.GetPos(out x, out y, out z); if (!gp._Move3Axis) { myStage.MoveTo(x, y, z + deltaz, false); } Text = "(" + evt.XPosition + "," + evt.YPosition + ")"; } }