Example #1
0
        public Boolean isChannelOpen()
        {
            ButtonAssignment ba = buttonAssignments[buttonAssignmentIndexes[CHANNEL_OPEN_FUNCTION]];

            if (ba != null && ba.buttonIndex != -1)
            {
                if (ba.joystick != null)
                {
                    try
                    {
                        return(ba.joystick.GetCurrentState().Buttons[ba.buttonIndex]);
                    }
                    catch (Exception)
                    {
                        // ignore this exception
                    }
                }
                else if (ba.controller.guid == UDP_NETWORK_CONTROLLER_GUID && CrewChief.gameDefinition.gameEnum == GameEnum.PCARS_NETWORK)
                {
                    return(PCarsUDPreader.getButtonState(ba.buttonIndex));
                }
                else if (ba.controller.guid == UDP_NETWORK_CONTROLLER_GUID && CrewChief.gameDefinition.gameEnum == GameEnum.PCARS2_NETWORK)
                {
                    return(PCars2UDPreader.getButtonState(ba.buttonIndex));
                }
            }
            return(false);
        }
Example #2
0
 private void pollForButtonClicks(ButtonAssignment ba)
 {
     if (ba != null && ba.buttonIndex != -1)
     {
         if (ba.joystick != null)
         {
             try
             {
                 if (ba.joystick != null)
                 {
                     JoystickState state = ba.joystick.GetCurrentState();
                     if (state != null)
                     {
                         Boolean click = state.Buttons[ba.buttonIndex];
                         if (click)
                         {
                             ba.hasUnprocessedClick = true;
                         }
                     }
                 }
             }
             catch (Exception)
             {
             }
         }
         else if (ba.controller.guid == UDP_NETWORK_CONTROLLER_GUID)
         {
             if (CrewChief.gameDefinition.gameEnum == GameEnum.PCARS_NETWORK)
             {
                 if (PCarsUDPreader.getButtonState(ba.buttonIndex))
                 {
                     ba.hasUnprocessedClick = true;
                 }
             }
             else if (CrewChief.gameDefinition.gameEnum == GameEnum.PCARS2_NETWORK)
             {
                 if (PCars2UDPreader.getButtonState(ba.buttonIndex))
                 {
                     ba.hasUnprocessedClick = true;
                 }
             }
         }
     }
 }
Example #3
0
        public GameDataReader getGameStateReader(GameDefinition gameDefinition)
        {
            lock (this)
            {
                switch (gameDefinition.gameEnum)
                {
                case GameEnum.PCARS_NETWORK:
                    if (pcarsUDPreader == null)
                    {
                        pcarsUDPreader = new PCarsUDPreader();
                    }
                    return(pcarsUDPreader);

                case GameEnum.PCARS2_NETWORK:
                    if (pcars2UDPreader == null)
                    {
                        pcars2UDPreader = new PCars2UDPreader();
                    }
                    return(pcars2UDPreader);

                case GameEnum.PCARS_32BIT:
                case GameEnum.PCARS_64BIT:
                    if (pcarsSharedMemoryReader == null)
                    {
                        pcarsSharedMemoryReader = new PCarsSharedMemoryReader();
                    }
                    return(pcarsSharedMemoryReader);

                case GameEnum.PCARS2:
                    if (pcars2SharedMemoryReader == null)
                    {
                        pcars2SharedMemoryReader = new PCars2SharedMemoryReader();
                    }
                    return(pcars2SharedMemoryReader);

                case GameEnum.RACE_ROOM:
                    if (r3eSharedMemoryReader == null)
                    {
                        r3eSharedMemoryReader = new R3ESharedMemoryReader();
                    }
                    return(r3eSharedMemoryReader);

                case GameEnum.RF1:
                    if (rf1SharedMemoryReader == null)
                    {
                        rf1SharedMemoryReader = new RF1SharedMemoryReader();
                    }
                    return(rf1SharedMemoryReader);

                case GameEnum.ASSETTO_64BIT:
                case GameEnum.ASSETTO_32BIT:
                    if (ascSharedMemoryReader == null)
                    {
                        ascSharedMemoryReader = new ACSSharedMemoryReader();
                    }
                    return(ascSharedMemoryReader);

                case GameEnum.RF2_64BIT:
                    if (rf2SharedMemoryReader == null)
                    {
                        rf2SharedMemoryReader = new RF2SharedMemoryReader();
                    }
                    return(rf2SharedMemoryReader);

                case GameEnum.IRACING:
                    if (iracingSharedMemoryReader == null)
                    {
                        iracingSharedMemoryReader = new iRacingSharedMemoryReader();
                    }
                    return(iracingSharedMemoryReader);

                case GameEnum.F1_2018:
                    if (f12018UDPReader == null)
                    {
                        f12018UDPReader = new F12018UDPreader();
                    }
                    return(f12018UDPReader);
                }
            }
            return(null);
        }
Example #4
0
        private Boolean getFirstPressedButton(System.Windows.Forms.Form parent, ControllerData controllerData, ButtonAssignment buttonAssignment)
        {
            Boolean gotAssignment = false;

            if (controllerData.guid == UDP_NETWORK_CONTROLLER_GUID)
            {
                int assignedButton;
                if (CrewChief.gameDefinition.gameEnum == GameEnum.PCARS_NETWORK)
                {
                    PCarsUDPreader gameDataReader = (PCarsUDPreader)GameStateReaderFactory.getInstance().getGameStateReader(GameDefinition.pCarsNetwork);
                    assignedButton = gameDataReader.getButtonIndexForAssignment();
                }
                else
                {
                    PCars2UDPreader gameDataReader = (PCars2UDPreader)GameStateReaderFactory.getInstance().getGameStateReader(GameDefinition.pCars2Network);
                    assignedButton = gameDataReader.getButtonIndexForAssignment();
                }
                if (assignedButton != -1)
                {
                    removeAssignmentsForControllerAndButton(controllerData.guid, assignedButton);
                    buttonAssignment.controller  = controllerData;
                    buttonAssignment.buttonIndex = assignedButton;
                    listenForAssignment          = false;
                    gotAssignment = true;
                }
            }
            else
            {
                listenForAssignment = true;
                // Instantiate the joystick
                try
                {
                    var joystick = new Joystick(directInput, controllerData.guid);
                    // Acquire the joystick
                    joystick.SetCooperativeLevel(parent, (CooperativeLevel.NonExclusive | CooperativeLevel.Background));
                    joystick.Properties.BufferSize = 128;
                    joystick.Acquire();
                    while (listenForAssignment)
                    {
                        Boolean[] buttons = joystick.GetCurrentState().Buttons;
                        for (int i = 0; i < buttons.Count(); i++)
                        {
                            if (buttons[i])
                            {
                                Console.WriteLine("Got button at index " + i);
                                removeAssignmentsForControllerAndButton(controllerData.guid, i);
                                buttonAssignment.controller  = controllerData;
                                buttonAssignment.joystick    = joystick;
                                buttonAssignment.buttonIndex = i;
                                listenForAssignment          = false;
                                gotAssignment = true;
                            }
                        }
                        if (!gotAssignment)
                        {
                            Thread.Sleep(20);
                        }
                    }
                    if (!gotAssignment)
                    {
                        joystick.Unacquire();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Unable to acquire device " + controllerData.deviceName + " error: " + e.Message);
                    listenForAssignment = false;
                    gotAssignment       = false;
                }
            }
            return(gotAssignment);
        }