capncoolio

Main (Xinput->VJoy)

Jun 10th, 2021
572
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using CoreDX.vJoy.Wrapper;
  5.  
  6.  
  7. namespace XInputToVJoy
  8. {
  9.     class Program
  10.     {
  11.         private static IVJoyController _pad;
  12.         private static bool _toggleHalfPress = false;
  13.  
  14.         static void Main(string[] args)
  15.         {
  16.             _pad = VJoyControllerManager.GetManager().AcquireController(1);
  17.             var watcher = new GamePadWatcher();
  18.  
  19.             //Set all axes to middle
  20.             _pad.SetAxisX(16000);
  21.             _pad.SetAxisY(16000);
  22.             _pad.SetAxisRx(16000);
  23.             _pad.SetAxisRz(16000);
  24.             _pad.SetSlider0(16000);
  25.             _pad.SetAxisZ(16000);
  26.  
  27.             watcher.GamePadButtonPressed += Watcher_GamePadButtonPressed;
  28.  
  29.             watcher.GamePadButtonReleased += Watcher_GamePadButtonReleased;
  30.  
  31.             watcher.GamePadThumbStickStateChanged += Watcher_GamePadThumbStickStateChanged;
  32.  
  33.             watcher.GamePadTriggerStateChanged += Watcher_GamePadTriggerStateChanged;
  34.  
  35.             watcher.GamePadDpadPressed += Watcher_GamePadDpadPressed;
  36.  
  37.             watcher.GamePadDpadReleased += Watcher_GamePadDpadReleased;
  38.  
  39.             while (true) ;
  40.         }
  41.  
  42.         private static void Watcher_GamePadDpadReleased(object sender, GamePadDpadEventArgs args)
  43.         {
  44.             switch (args.Direction)
  45.             {
  46.                 case Dpad.Up:
  47.                     Console.WriteLine($"Dpad {args.Direction} released! after {args.HoldLength.TotalMilliseconds}ms");
  48.                     break;
  49.                 case Dpad.Left:
  50.                     Console.WriteLine($"Dpad {args.Direction} released! after {args.HoldLength.TotalMilliseconds}ms");
  51.                     break;
  52.                 case Dpad.Right:
  53.                     Console.WriteLine($"Dpad {args.Direction} released! after {args.HoldLength.TotalMilliseconds}ms");
  54.                     break;
  55.                 case Dpad.Down:
  56.                     Console.WriteLine($"Dpad {args.Direction} released! after {args.HoldLength.TotalMilliseconds}ms");
  57.                     break;
  58.                 default:
  59.                     break;
  60.             }
  61.  
  62.             _pad.SetDiscPov((int)Dpad.Centre, 1);
  63.         }
  64.  
  65.         private static void Watcher_GamePadDpadPressed(object sender, GamePadDpadEventArgs args)
  66.         {
  67.             switch (args.Direction)
  68.             {
  69.                 case Dpad.Up:
  70.                     Console.WriteLine($"Dpad pressed in the {args.Direction} direction!");
  71.                     break;
  72.                 case Dpad.Left:
  73.                     Console.WriteLine($"Dpad pressed in the {args.Direction} direction!");
  74.                     break;
  75.                 case Dpad.Right:
  76.                     Console.WriteLine($"Dpad pressed in the {args.Direction} direction!");
  77.                     break;
  78.                 case Dpad.Down:
  79.                     Console.WriteLine($"Dpad pressed in the {args.Direction} direction!");
  80.                     break;
  81.                 default:
  82.                     break;
  83.             }
  84.  
  85.             _pad.SetDiscPov((int)args.Direction, 1);
  86.         }
  87.  
  88.         private static void Watcher_GamePadTriggerStateChanged(object sender, GamePadTriggerEventArgs args)
  89.         {
  90.             var state = ((args.State.Right - args.State.Left) + 1) * 16000;
  91.  
  92.             if (args.ShoulderTrigger == Trigger.Left)
  93.             {
  94.                 Console.WriteLine($"Trigger {args.ShoulderTrigger} value: {args.State.Left}");
  95.             }
  96.  
  97.             if (args.ShoulderTrigger == Trigger.Right)
  98.             {
  99.                 Console.WriteLine($"Trigger {args.ShoulderTrigger} value: {args.State.Right}");
  100.             }
  101.             _pad.SetSlider0((int)(state));
  102.         }
  103.  
  104.         private static float currentZ = 0;
  105.         private static void Watcher_GamePadButtonPressed(object sender, GamePadButtonEventArgs args)
  106.         {
  107.             Console.WriteLine($"Button {args.Button} pressed!");
  108.  
  109.             if (args.Button == Button.LeftStick)
  110.             {
  111.                 if(!_toggleHalfPress)
  112.                 {
  113.                     Console.WriteLine("TOGGLE HALF PRESS ON");
  114.                     _pad.SetAxisZ((int)(32000 * 0.640));
  115.                     _toggleHalfPress = true;
  116.  
  117.                 } else if (currentZ == 0)
  118.                 {
  119.                     Console.WriteLine("TOGGLE HALF PRESS OFF");
  120.                     Task.Run(() =>
  121.                     {
  122.                         for (float i = 32000f * 0.640f; i >= 0; i -= 0.33f)
  123.                         {
  124.                             currentZ = i;
  125.                             _pad.SetAxisZ((int)i);
  126.                         }
  127.  
  128.                         currentZ = 0;
  129.                         _pad.SetAxisZ(0);
  130.                         _toggleHalfPress = false;
  131.                     });
  132.                 }
  133.             }
  134.             else if (args.Button == Button.X)
  135.             {
  136.                 _pad.SetAxisZ(0);
  137.                 Thread.Sleep(5);
  138.                 _pad.SetAxisZ(32000);
  139.             }
  140.             else
  141.             {
  142.                 _pad.PressButton((uint)args.Button);
  143.             }
  144.            
  145.         }
  146.  
  147.         private static void Watcher_GamePadButtonReleased(object sender, GamePadButtonEventArgs args)
  148.         {
  149.             Console.WriteLine($"Button {args.Button} released! Was held for {args.HoldLength.TotalMilliseconds}ms");
  150.  
  151.  
  152.             if (args.Button == Button.X)
  153.             {
  154.                 if(_toggleHalfPress)
  155.                 {
  156.                     _pad.SetAxisZ((int)(32000 * 0.640));
  157.                 } else
  158.                 {
  159.                     _pad.SetAxisZ(0);
  160.                 }
  161.             }
  162.             else
  163.             {
  164.                 _pad.ReleaseButton((uint)args.Button);
  165.             }
  166.         }
  167.  
  168.         private static void Watcher_GamePadThumbStickStateChanged(object sender, GamePadThumbStickEventArgs args)
  169.         {
  170.             //Normalize to range 0 - 1
  171.             var leftX = (args.State.Left.X + 1) / 2;
  172.             var leftY = (args.State.Left.Y + 1) / 2;
  173.             var rightX = (args.State.Right.X + 1) / 2;
  174.             var rightY = (args.State.Right.Y + 1) / 2;
  175.  
  176.             if (args.ThumbStick == Stick.Left)
  177.                 Console.WriteLine($"Thumb stick {args.ThumbStick} moved to X:{leftX} Y:{leftY}");
  178.  
  179.             if (args.ThumbStick == Stick.Right)
  180.                 Console.WriteLine($"Thumb stick {args.ThumbStick} moved to X:{rightX} Y:{rightY}");
  181.  
  182.             //VJoy axis values are 0 - 32000
  183.             _pad.SetAxisX((int)(leftX * 32000));
  184.             _pad.SetAxisY((int)(leftY * 32000));
  185.             _pad.SetAxisRx((int)(rightX * 32000));
  186.             _pad.SetAxisRz((int)(rightY * 32000));
  187.         }
  188.     }
  189. }
  190.  
RAW Paste Data