Esempio n. 1
0
        public MainForm()
        {
            InitializeComponent();
            try
            {
                XInputObj = new XInputManager();
                vJoyObj   = new vJoyManager();
                RefreshDeviceList();

                Application.ApplicationExit += new EventHandler(delegate(Object o, EventArgs a)
                {
                    StopThread();

                    // Bug or something but the notify icon lingers after exiting unless we explicitely dispose it
                    if (MainNotifyIcon != null)
                    {
                        MainNotifyIcon.Icon = null;
                        MainNotifyIcon.Dispose();
                        MainNotifyIcon = null;
                    }
                });

                string[] cmds = Environment.GetCommandLineArgs();
                HandleArguments(cmds);
            }
            catch (System.IO.FileNotFoundException e)
            {
                MessageBox.Show("FileNotFoundException: " + e.FileName + ". This may occur because of missing DLLs. Make sure to include everything! Application will exit..", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(-1);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error: " + e.Message + ". This may occur because of missing DLLs. Make sure to include everything! Application will exit..", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(-1);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Main input forwarding function/loop (input thread).
        /// </summary>
        public void ThreadFunc()
        {
            try
            {
                this.BeginInvoke((Action)(() =>
                {
                    SetInfoText("Running feeder.", Color.Green);
                }));

                XInputManager.InputState stateData;
                vJoyManager.AxisExtents  XLimit   = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_X);
                vJoyManager.AxisExtents  YLimit   = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_Y);
                vJoyManager.AxisExtents  RXLimit  = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_RX);
                vJoyManager.AxisExtents  RYLimit  = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_RY);
                vJoyManager.AxisExtents  SL0Limit = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_SL0);
                vJoyManager.AxisExtents  SL1Limit = vJoyObj.GetAxisExtents(HID_USAGES.HID_USAGE_SL1);

                List <bool> finalButtonStates = new List <bool>();
                int         ButtonCount       = vJoyObj.GetButtonCount(vJoyObj.ActiveVJoyID);
                while (finalButtonStates.Count < ButtonCount)
                {
                    finalButtonStates.Add(false);
                }

                Dictionary <HID_USAGES, int> finalHidValues = new Dictionary <HID_USAGES, int>();
                Dictionary <HID_USAGES, vJoyManager.AxisExtents> HidExtents = new Dictionary <HID_USAGES, vJoyManager.AxisExtents>();
                List <HID_USAGES> AvailableHidValues = vJoyObj.GetExistingAxes(vJoyObj.ActiveVJoyID);
                foreach (HID_USAGES axis in AvailableHidValues)
                {
                    finalHidValues.Add(axis, 0);
                    HidExtents.Add(axis, vJoyObj.GetAxisExtents(axis));
                }

                List <int> xInputMinRanges = new List <int>();
                List <int> xInputMaxRanges = new List <int>();

                for (int i = 0; i < XInputManager.InputCount; i++)
                {
                    int[] inputRange = XInputManager.GetAxisLimitsForInput((XInputManager.Inputs)i);
                    xInputMinRanges.Add(inputRange[0]);
                    xInputMaxRanges.Add(inputRange[1]);
                }

                int tempHidValue = 0;
                while (bIsActive)
                {
                    // Thread body
                    stateData = XInputObj.GetState();


                    for (int i = 0; i < finalButtonStates.Count; i++)
                    {
                        finalButtonStates[i] = false;
                    }

                    for (int i = 0; i < AvailableHidValues.Count; i++)
                    {
                        finalHidValues[AvailableHidValues[i]] = 0;
                    }

                    foreach (InputMapping inputMap in InputMappings)
                    {
                        switch (inputMap.Type)
                        {
                        case InputMapping.MappingType.Button:
                            finalButtonStates[(int)inputMap.ButtonIndex - 1] |= XInputManager.GetInputStateButtonValueFromInputType(ref stateData, inputMap.XInput);
                            break;

                        case InputMapping.MappingType.Axis:
                            tempHidValue = XInputManager.GetInputStateAxisValueFromInputType(ref stateData, inputMap.XInput);
                            tempHidValue = RemapValueToVJoy(tempHidValue, xInputMinRanges[(int)inputMap.XInput], xInputMaxRanges[(int)inputMap.XInput], HidExtents[inputMap.vJoyAxis]);
                            finalHidValues[inputMap.vJoyAxis] = Math.Max(finalHidValues[inputMap.vJoyAxis], tempHidValue);
                            break;

                        default:
                            break;
                        }
                    }

                    for (uint i = 0; i < finalButtonStates.Count; i++)
                    {
                        vJoyObj.SetButton(i + 1, finalButtonStates[(int)i]);
                    }

                    for (int i = 0; i < AvailableHidValues.Count; i++)
                    {
                        HID_USAGES Axis = AvailableHidValues[i];
                        vJoyObj.SetAxis(Axis, finalHidValues[Axis]);
                    }

                    Thread.Sleep(16);                     // The delay between updates in ms (16 = ~60fps)
                }

                // Thread done/canceled
            }
            catch (ThreadAbortException)
            {
                // Thread aborted
            }
        }