Inheritance: MonoBehaviour
コード例 #1
0
ファイル: Joycon.cs プロジェクト: KurtYilmaz/BetterJoyForCemu
        public Joycon(IntPtr handle_, bool imu, bool localize, float alpha, bool left, string path, string serialNum, int id = 0, bool isPro = false)
        {
            serial_number = serialNum;
            activeData    = new float[6];
            handle        = handle_;
            imu_enabled   = imu;
            do_localize   = localize;
            rumble_obj    = new Rumble(160, 320, 0);
            filterweight  = alpha;
            isLeft        = left;

            PadId      = id;
            LED        = (byte)(0x1 << PadId);
            this.isPro = isPro;
            isUSB      = serialNum == "000000000001";

            this.path = path;

            connection = isUSB ? 0x01 : 0x02;

            if (showAsXInput)
            {
                xin = new Xbox360Controller(Program.emClient);

                if (toRumble)
                {
                    xin.FeedbackReceived += ReceiveRumble;
                }
                report = new Xbox360Report();
            }
        }
コード例 #2
0
    public void LOCAL_SetPlayerNumber(int id)
    {
        Color c = playerMaterials [id - 1].color;

        playercolor = c;
        playerID    = id;
        myStats     = new Scorecard(id);
        XBox        = new Xbox360Controller(id);
        if (nametag == null)
        {
            nametag = transform.FindChild("Nametag").GetComponent <TextMesh> ();
            //change player to dif color
            //body
            //transform.GetChild (0).GetChild (0).GetComponent<SpriteRenderer> ().material = playerMaterials[id - 1];
            //5
            for (int i = 0; i < 5; ++i)
            {
                //transform.GetChild (0).GetChild (0).GetChild (i).GetComponent<SpriteRenderer> ().material = playerMaterials[id - 1];
                if (i != 4)
                {
                    //transform.GetChild (0).GetChild (0).GetChild (i).GetChild(0).GetComponent<SpriteRenderer> ().material = playerMaterials[id - 1];
                    //transform.GetChild (0).GetChild (0).GetChild (i).GetChild(0).GetChild(0).GetComponent<SpriteRenderer> ().material = playerMaterials[id - 1];
                }
            }
            //nametag.color = c;
            nametag.text = "P" + id.ToString();

            AI = GetComponent <AIComponent>();
            if (AI != null)
            {
                nametag.text = "CP" + id.ToString();
            }
        }
    }
コード例 #3
0
        private static void Main(string[] args)
        {
            var x360 = new Xbox360Controller();

            x360.FeedbackReceived +=
                (sender, eventArgs) => Console.WriteLine(
                    $"LM: {eventArgs.LargeMotor}, " +
                    $"SM: {eventArgs.SmallMotor}, " +
                    $"LED: {eventArgs.LedNumber}");
            x360.PlugIn();

            var report = new Xbox360Report();

            report.SetButtons(Xbox360Buttons.A, Xbox360Buttons.B);
            report.SetAxis(Xbox360Axes.LeftTrigger, 0xFF);
            report.SetAxis(Xbox360Axes.RightTrigger, 0xFF);

            x360.SendReport(report);

            Console.ReadKey();

            var ds4 = new DualShock4Controller();

            ds4.FeedbackReceived +=
                (sender, eventArgs) => Console.WriteLine(
                    $"LM: {eventArgs.LargeMotor}, " +
                    $"SM: {eventArgs.SmallMotor}, ");
            ds4.PlugIn();

            Console.ReadKey();
        }
コード例 #4
0
        private static void Main(string[] args)
        {
            var client = new ViGEmClient();

#if X360
            var x360 = new Xbox360Controller(client);

            x360.FeedbackReceived +=
                (sender, eventArgs) => Console.WriteLine(
                    $"LM: {eventArgs.LargeMotor}, " +
                    $"SM: {eventArgs.SmallMotor}, " +
                    $"LED: {eventArgs.LedNumber}");

            x360.Connect();

            var report = new Xbox360Report();
            report.SetButtons(Xbox360Buttons.A, Xbox360Buttons.B);
            report.SetAxis(Xbox360Axes.LeftTrigger, 0xFF);
            report.SetAxis(Xbox360Axes.RightTrigger, 0xFF);

            x360.SendReport(report);
#endif

            var ds4 = new DualShock4Controller(client);

            ds4.Connect();

            var report = new DualShock4Report();
            report.SetButtons(DualShock4Buttons.Cross);

            ds4.SendReport(report);

            /*
             * var x360 = new Xbox360Controller();
             * x360.FeedbackReceived +=
             *  (sender, eventArgs) => Console.WriteLine(
             *      $"LM: {eventArgs.LargeMotor}, " +
             *      $"SM: {eventArgs.SmallMotor}, " +
             *      $"LED: {eventArgs.LedNumber}");
             * x360.PlugIn();
             *
             * var report = new Xbox360Report();
             * report.SetButtons(Xbox360Buttons.A, Xbox360Buttons.B);
             * report.SetAxis(Xbox360Axes.LeftTrigger, 0xFF);
             * report.SetAxis(Xbox360Axes.RightTrigger, 0xFF);
             *
             * x360.SendReport(report);
             *
             * Console.ReadKey();
             *
             * var ds4 = new DualShock4Controller();
             * ds4.FeedbackReceived +=
             *  (sender, eventArgs) => Console.WriteLine(
             *      $"LM: {eventArgs.LargeMotor}, " +
             *      $"SM: {eventArgs.SmallMotor}, ");
             * ds4.PlugIn();
             */

            Console.ReadKey();
        }
コード例 #5
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            if (this.testClient == null && this.testController == null)
            {
                this.testClient     = new ViGEmClient();
                this.testController = new Xbox360Controller(this.testClient);
                this.testController.Connect();

                button1.Enabled = false;

                enabledDisableMoveButtons(true);
            }
            else
            {
                this.testController.Disconnect();
                this.testController.Dispose();
                this.testClient.Dispose();

                this.testController = null;
                this.testClient     = null;
                button1.Enabled     = true;

                enabledDisableMoveButtons(false);
            }
        }
コード例 #6
0
ファイル: Joycon.cs プロジェクト: Blackspo0n/BetterJoyForCemu
        public Joycon(IntPtr handle, bool imu, bool left, string path, int id = 0,
                      bool isPro = false, bool usb = false)
        {
            this.handle = handle;
            imu_enabled = imu;
            rumble_obj  = new Rumble(160, 320, 0);
            isLeft      = left;

            PadId      = id;
            this.isPro = isPro;
            isUSB      = usb;

            this.path = path;

            connection = isUSB ? 0x01 : 0x02;

            if (showAsXInput)
            {
                xin = new Xbox360Controller(Program.emClient);

                if (_toRumble)
                {
                    xin.FeedbackReceived += ReceiveRumble;
                }
                report = new Xbox360Report();
            }
        }
コード例 #7
0
ファイル: Joycon.cs プロジェクト: ghettokon/BetterJoyForCemu
        public Joycon(IntPtr handle_, bool imu, bool localize, float alpha, bool left, int id = 0, bool isPro = false, bool usb = false)
        {
            handle       = handle_;
            imu_enabled  = imu;
            do_localize  = localize;
            rumble_obj   = new Rumble(160, 320, 0);
            filterweight = alpha;
            isLeft       = left;

            PadId      = id;
            this.isPro = isPro;
            isUSB      = usb;

            connection = isUSB ? 0x01 : 0x02;

            if (isLeft || isPro)
            {
                xin = new Xbox360Controller(Program.emClient);
                if (toRumble)
                {
                    xin.FeedbackReceived += ReceiveRumble;
                }
                report = new Xbox360Report();
            }
        }
コード例 #8
0
        }                                         //příznak, zda se povedlo připojit externí ovladač

        /// <summary>
        /// Vrátí první nejlépe vyhovující vnější ovládací prvek a pokud nenalezne žádný, tak vrátí softwarovou simulaci
        /// </summary>
        /// <returns>instanci představujícíc joystick</returns>
        public IJoystick getJoystick()
        {
            message = "";
            IJoystick joystick = new Xbox360Controller();

            success = joystick.inicialize();
            if (!success)
            {
                joystick = new Gamepad();
                success  = joystick.inicialize();
            }
            else
            {
                message = "Byl úspěšně připojen plně kompatibilní externí ovladač.";
            }
            if (!success)
            {
                message  = "Nepovedlo se najít žádné kompatibilní externí ovládací zařízení. Robota je možné ovládat pomocí softwarového ovladače.";
                joystick = ControllView.getInstance();
            }
            else if (message == "")
            {
                message = "Byl úspěšně připojen částečně kompatibilní externí ovladač. Některé funkce mohou být omezeny.";
            }
            return(joystick);
        }
コード例 #9
0
    // Update is called once per frame
    void Update()
    {
        if (x3 == null)
        {
            x3 = new Xbox360Controller(ID);
        }

        if (SignedIn)
        {
            float hor = x3.HorizontalAxis();
            float ver = x3.VerticalAxis();
            this.transform.position += new Vector3(hor, -ver) * speed;
        }
        else
        {
            if (x3.StartPressed())
            {
                SignedIn = true;
                this.GetComponent <SpriteRenderer> ().enabled            = true;
                select.transform.GetChild(1).GetComponent <Text> ().text = "";
                select.color = desired;
                SignedInCount++;
                AudioSource.PlayClipAtPoint(GameObject.FindObjectOfType <NetworkingObjectMenu>().click, GameObject.FindGameObjectWithTag("MainCamera").transform.position);
            }
        }

        if (collidingLevel != null)
        {
            if (x3.PressedJump())
            {
                LevelType level = collidingLevel.lt;
                GlobalProperties.LEVEL = level.ToString();
                collidingLevel.GetComponent <SpriteRenderer>().color = Color.red;
                AudioSource.PlayClipAtPoint(collidingLevel.noise, GameObject.FindGameObjectWithTag("MainCamera").transform.position);

                if (prevCollidingLevel == null || prevCollidingLevel == collidingLevel)
                {
                    prevCollidingLevel = collidingLevel;
                }
                else
                {
                    prevCollidingLevel.GetComponent <SpriteRenderer>().color = Color.white;
                    prevCollidingLevel = collidingLevel;
                }
            }
        }
        else if (colliding != null)
        {
            if (x3.PressedJump())
            {
                CharacterType character = colliding.ct;
                GlobalProperties.PLAYERCHOICE[ID - 1] = character.ToString();
                select.transform.GetChild(2).GetComponent <Image>().sprite    = GameObject.FindObjectOfType <CharacterDictionary>().GetByText(character.ToString());
                select.transform.GetChild(1).GetComponent <Text> ().text      = "\n" + character.ToString();
                select.transform.GetChild(1).GetComponent <Text> ().alignment = TextAnchor.UpperRight;
                AudioSource.PlayClipAtPoint(colliding.noise, GameObject.FindGameObjectWithTag("MainCamera").transform.position);
            }
        }
    }
コード例 #10
0
ファイル: connect.cs プロジェクト: Denperidge/xPortable
        protected override void OnOpen()
        {
            Xbox360Controller newController = new Xbox360Controller(Globals.client);

            newController.FeedbackReceived += connectClientToPort;

            newController.Connect();
        }
コード例 #11
0
        /// <summary>
        /// Implements <see cref="IXOutputInterface.Plugin(int)"/>
        /// </summary>
        /// <param name="controllerCount">number of controller</param>
        /// <returns>If it was successful</returns>
        public bool Plugin(int controllerCount)
        {
            var controller = new Xbox360Controller(client);

            controller.Connect();
            controllers.Add(controllerCount, controller);
            return(true);
        }
コード例 #12
0
 public X360(Xbox360Controller pController, int pPort, Label pLblStatus, Button pBtnDisconnect)
 {
     controller    = pController;
     port          = pPort;
     lblStatus     = pLblStatus;
     btnDisconnect = pBtnDisconnect;
     disconnected  = false;
     report        = new Xbox360Report();
 }
コード例 #13
0
 // Use this for initialization
 void Start()
 {
     x3 = new Xbox360Controller(ID);
     this.GetComponent <SpriteRenderer> ().enabled = false;
     desired      = select.color;
     select.color = Color.white;
     desiredText  = select.transform.GetChild(0).GetComponent <Text> ().text;
     //select.transform.GetChild (0).GetComponent<Text> ().text = "";
 }
コード例 #14
0
        protected void moveStick(Direction x, Direction y, Xbox360Controller controller)
        {
            if (controller != null && (x != Direction.Down || y != Direction.Down))
            {
                for (short i = 0; i < 32767; i++)
                {
                    Xbox360Report report = new Xbox360Report();

                    if (x == Direction.Up)
                    {
                        report.LeftThumbX = i;
                    }
                    else if (x == Direction.Down)
                    {
                        report.LeftThumbX = (short)(i * -1);
                    }

                    if (y == Direction.Up)
                    {
                        report.LeftThumbY = i;
                    }
                    else if (y == Direction.Down)
                    {
                        report.LeftThumbY = (short)(i * -1);
                    }

                    controller.SendReport(report);
                }

                for (short i = 32767; i > 0; i--)
                {
                    Xbox360Report report = new Xbox360Report();

                    if (x == Direction.Up)
                    {
                        report.LeftThumbX = i;
                    }
                    else if (x == Direction.Down)
                    {
                        report.LeftThumbX = (short)(i * -1);
                    }

                    if (y == Direction.Up)
                    {
                        report.LeftThumbY = i;
                    }
                    else if (y == Direction.Down)
                    {
                        report.LeftThumbY = (short)(i * -1);
                    }

                    controller.SendReport(report);
                }
            }
        }
コード例 #15
0
    //TODO: Better Controller-Platform detection. Support for Xbox360Pad on Linux (it could already work, if not just add the appropriate name in UseOnPlatform)
    public static void RegisterControllers()
    {
        controllers = new List <ActionController> ();
        //initialize correct controller

        var os = SystemInfo.operatingSystem;

        Debug.Log(os);

        //If a keyboard is avaliable (aka : we are on PC) add it
        var keyboard = new KeyboardController();

        if (keyboard.useOnPlatform("keyboard"))
        {
            controllers.Add(keyboard);
            isOnPC = true;
        }

        //GetJoystickNames is not exported in WP8 builds because unity is dumb (it should just return 0 instead of #if)

#if !UNITY_WP8 || (UNITY_WP8 && UNITY_EDITOR)
        //Go trough every joystick and instantiate the correct controller (if it exist)
        var joysticks = Input.GetJoystickNames();
        Debug.Log("Found " + joysticks.Length + " joysticks");

        //instantiate valid controller for every platfom
        foreach (var joystick in joysticks)
        {
            var Xbox360Pad = new Xbox360Controller();

            if (Xbox360Pad.useOnPlatform(joystick))
            {
                Xbox360Pad.Start();
                controllers.Add(Xbox360Pad);
            }
        }
#endif

        //If we are on a touch enabled platform instantiate a touch controller
        var touchSensor = new TouchController();
        if (touchSensor.useOnPlatform("touch"))
        {
            controllers.Add(touchSensor);
        }

        if (controllers.Count == 1 && isOnPC)
        {
            currentController = 0; //Use keyboard if no controller and on PC
        }
        else if (isOnPC)
        {
            currentController = 1;
        }
    }
コード例 #16
0
        public override void Disconnect()
        {
            if (forceFeedbackCall != null)
            {
                cont.FeedbackReceived -= forceFeedbackCall;
                forceFeedbackCall      = null;
            }

            cont.Disconnect();
            cont.Dispose();
            cont = null;
        }
コード例 #17
0
ファイル: MiGamepad.cs プロジェクト: aadfPT/mi-360
        public MiGamepad(HidDevice device, ViGEmClient client)
        {
            _Device = device;
            _Device.MonitorDeviceEvents = false;

            _Target = new Xbox360Controller(client);
            _Target.FeedbackReceived += TargetOnFeedbackReceived;

            // TODO mark the threads as background?
            _InputThread = new Thread(DeviceWorker);

            _CTS = new CancellationTokenSource();
        }
コード例 #18
0
        public Keyboard2Xinput(String mappingFile)
        {
            config = new Config(mappingFile);

            InitializeAxesDict();
            InitializeButtonsDict();
            log.Debug("initialize dicts done.");

            // start enabled?
            String startEnabledStr = config.getCurrentMapping()["startup"]["enabled"];

            // only start disabled if explicitly configured as such
            if ((startEnabledStr != null) && ("false".Equals(startEnabledStr.ToLower())))
            {
                enabled = false;
            }

            // try to init ViGEm
            try
            {
                client = new ViGEmClient();
            }
            catch (VigemBusNotFoundException e)
            {
                throw new ViGEmBusNotFoundException("ViGEm bus not found, please make sure ViGEm is correctly installed.", e);
            }
            // create pads
            controllers = new List <Xbox360Controller>(config.PadCount);
            reports     = new List <Xbox360Report>(config.PadCount);
            for (int i = 1; i <= config.PadCount; i++)
            {
                Xbox360Controller controller = new Xbox360Controller(client);
                controllers.Add(controller);
                controller.FeedbackReceived +=
                    (sender, eventArgs) => Console.WriteLine(
                        $"LM: {eventArgs.LargeMotor}, " +
                        $"SM: {eventArgs.SmallMotor}, " +
                        $"LED: {eventArgs.LedNumber}");

                controller.Connect();
                reports.Add(new Xbox360Report());
                Thread.Sleep(1000);
            }
            // the pressed buttons (to avoid sending reports if the pressed buttons haven't changed)
            pressedButtons = new List <ISet <Xbox360Buttons> >(config.PadCount);
            for (int i = 0; i < config.PadCount; i++)
            {
                pressedButtons.Add(new HashSet <Xbox360Buttons>());
            }
            listeners = new List <StateListener>();
        }
コード例 #19
0
ファイル: Program.cs プロジェクト: psyke83/ViGEm
        static void Main(string[] args)
        {
            var x360 = new Xbox360Controller();

            x360.PlugIn();

            Console.ReadKey();

            var ds4 = new DualShock4Controller();

            ds4.PlugIn();

            Console.ReadKey();
        }
コード例 #20
0
        public bool Initialize(uint id)
        {
            if (id <= 0 || (id > 15 && id < 1001) || id > 1004)
            {
                throw new ArgumentException("Invalid ID!", "id");
            }

            client = new ViGEmClient();
            ctrl   = new Xbox360Controller(client);

            ctrl.Connect();

            Initialized = true;
            return(true);
        }
コード例 #21
0
ファイル: MiGamepad.cs プロジェクト: kingzengg/mi-360
        public MiGamepad(string device, ViGEmClient client)
        {
            _Device = HidDevices.GetDevice(device);
            _Device.MonitorDeviceEvents = false;

            _Target = new Xbox360Controller(client);
            _Target.FeedbackReceived += Target_OnFeedbackReceived;

            // TODO mark the threads as background?
            _InputThread = new Thread(DeviceWorker);

            _CTS    = new CancellationTokenSource();
            _Report = new Xbox360Report();

            LedNumber = 0xFF;
        }
コード例 #22
0
    void LocalLogic()
    {
        Xbox360Controller xc = GetComponent <PlayerController> ().GetXBox();

        if (trySteal)
        {
            if (target.GetComponent <PlayerController> ().hasStickyBomb)
            {
                target.GetComponent <PlayerController> ().hasStickyBomb = false;
                this.GetComponent <PlayerController> ().hasStickyBomb   = true;
                target.GetComponent <PlayerController> ().bombStatus.GetComponent <SpriteRenderer>().sprite = target.GetComponent <PlayerController> ().noBombSprite;
                this.GetComponent <PlayerController> ().bombStatus.GetComponent <SpriteRenderer>().sprite   = this.GetComponent <PlayerController> ().hasBombSprite;
                abilityAvailable = false;
                PopText.Create("SNATCHED!", Color.white, 60, transform.position + Vector3.up * .5f);
            }
        }
    }
コード例 #23
0
ファイル: Program.cs プロジェクト: pinoelefante/MousePad
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            MouseHighlighter highlighter = new MouseHighlighter();

            highlighter.DeviceEnabled();
            Xbox360Controller x360 = new Xbox360Controller();

            x360.OnMouseMoveAction = () => highlighter.DrawHighlight();
            x360.OnEnableAction    = () => highlighter.DeviceEnabled();
            x360.OnDisableAction   = () => highlighter.DeviceDisable();
            while (true)
            {
                highlighter.DrawHighlight();
                x360.GetControllerInput();
                Thread.Sleep(10);
            }
        }
コード例 #24
0
ファイル: Program.cs プロジェクト: lkuich/ControlPadServer
        static void Main(string[] args)
        {
            var client = new ViGEmClient();

            var x360 = new Xbox360Controller(client);
            var id   = x360.ProductId;

            x360.FeedbackReceived +=
                (sender, eventArgs) => Console.WriteLine(
                    eventArgs.ToString() +
                    $"LM: {eventArgs.LargeMotor}, " +
                    $"SM: {eventArgs.SmallMotor}, " +
                    $"LED: {eventArgs.LedNumber}");
            x360.Connect();
            var id2 = x360.ProductId;

            Console.ReadLine();
        }
コード例 #25
0
ファイル: ControlHub.cs プロジェクト: lkuich/ControlPadServer
        public void Start()
        {
            var client = new ViGEmClient();

            X360Controller = new Xbox360Controller(client);

            server = new Server
            {
                Services =
                {
                    XboxButtons.BindService(new XboxImpl(X360Controller)),
                    StandardInput.BindService(new StandardInputImpl()) // this))
                },
                Ports = { new ServerPort(Host, Port, ServerCredentials.Insecure) }
            };

            server.Start();
            ServerStarted = true;
        }
コード例 #26
0
        void InitController()
        {
            var slot = GamepadManager.GetSlot(ControllerId);

            if (!slot.IsConnected)
            {
                return;
            }

            if (SnesController.IsMatch(slot))
            {
                var snes = new SnesController(slot);
                Jump            = snes.B;
                Attack          = snes.Y;
                Dodge           = snes.R;
                ActivateUpgrade = snes.X;
                Guard           = snes.L;
                Start           = snes.Start;

                Direction = snes.Dpad;
            }
            else if (Xbox360Controller.IsMatch(slot))
            {
                var xbox = new Xbox360Controller(slot);

                Jump            = xbox.A;
                Attack          = xbox.X;
                Dodge           = xbox.RB;
                ActivateUpgrade = xbox.Y;
                Guard           = xbox.LB;
                Start           = xbox.Start;

                Direction = xbox.LeftStick;
            }
            else
            {
                throw new Exception("invalid controller woh");
            }
        }
コード例 #27
0
 public override bool Initialize(Action <Exception> FailedCallback)
 {
     try
     {
         myViGEmClient = new ViGEmClient();
         myController  = new Xbox360Controller(myViGEmClient);
         myController.Connect();
         myController.FeedbackReceived += MyController_FeedbackReceived;
         return(true);
     }
     catch (Exception ex)
     {
         if (ex is Nefarius.ViGEm.Client.Exceptions.VigemBusNotFoundException)
         {
             FailedCallback.Invoke(new Exception("没有找到ViGEm虚拟手柄驱动!"));
         }
         else
         {
             FailedCallback.Invoke(ex);
         }
         return(false);
     }
 }
コード例 #28
0
ファイル: connect.cs プロジェクト: Denperidge/xPortable
        private void connectClientToPort(object sender, Xbox360FeedbackReceivedEventArgs eventArgs)
        {
            Xbox360Controller newController = (Xbox360Controller)sender;

            newController.FeedbackReceived -= connectClientToPort;

            Console.WriteLine(eventArgs);
            Console.WriteLine(eventArgs.LedNumber);

            // ledNumber returns 0 for player 1, 1 for player 2, 2 for player 3, 3 for player 4
            // but on other computers, ledNumber returns 1 for player 1, 2 for player 2 and so on
            // When the first controller connects (thus when portCalculator isn't defined yet),
            // if the LedNumber is 0, portCalculator = 1
            // else, it's 0
            if (Globals.portCalculator == null)
            {
                if (eventArgs.LedNumber == 0)
                {
                    Globals.portCalculator = 1;
                }
                else
                {
                    Globals.portCalculator = 0;
                }
            }

            int port = eventArgs.LedNumber + (int)Globals.portCalculator;

            if (port > 4)
            {
                newController.Disconnect();
                Send("Disconnect:4 controllers already connected!");
                return;
            }



            Application.Current.Dispatcher.Invoke(() =>
            {
                MainWindow mainWindow = (MainWindow)Application.Current.MainWindow;
                Label statusLabel;
                Button disconnectButton;

                switch (port)
                {
                case 1:
                    statusLabel      = mainWindow.lblController1Connected;
                    disconnectButton = mainWindow.btnController1Disconnect;
                    break;

                case 2:
                    statusLabel      = mainWindow.lblController2Connected;
                    disconnectButton = mainWindow.btnController2Disconnect;
                    break;

                case 3:
                    statusLabel      = mainWindow.lblController3Connected;
                    disconnectButton = mainWindow.btnController3Disconnect;
                    break;

                case 4:
                    statusLabel      = mainWindow.lblController4Connected;
                    disconnectButton = mainWindow.btnController4Disconnect;
                    break;

                default:
                    return;
                }

                Globals.wssv.AddWebSocketService("/x360_port" + port, () => new X360(newController, port, statusLabel, disconnectButton));
                // Example: Connected:x360_port1
                Send("Connected:x360_port" + port);
            });
        }
コード例 #29
0
        public void DoProcessing(IProgress <string> message, IProgress <string> xUpdate, IProgress <string> rawXUpdate, IProgress <string> yUpdate, IProgress <string> rawYUpdate, Joystick joystick, Keyboard keyboard, CancellationToken cancellationToken)
        {
            ViGEmClient               client            = new ViGEmClient();
            Xbox360Controller         controller        = new Xbox360Controller(client);
            ControllerBindingsStorage bindingStorage    = new ControllerBindingsStorage();
            Dictionary <int, int>     bindings          = bindingStorage.load();
            Xbox360Axes?              analogStickAxisX  = null;
            Xbox360Axes?              analogStickAxisY  = null;
            Xbox360Axes?              digitalStickAxisX = null;
            Xbox360Axes?              digitalStickAxisY = null;
            Xbox360Buttons?           joystickButton0   = null;
            bool leftTriggerLastPressed       = false;
            bool leftTriggerPressed           = false;
            bool rightTriggerLastPressed      = false;
            bool rightTriggerPressed          = false;
            bool digitalStickUpLastPressed    = false;
            bool digitalStickUpPressed        = false;
            bool digitalStickDownLastPressed  = false;
            bool digitalStickDownPressed      = false;
            bool digitalStickLeftLastPressed  = false;
            bool digitalStickLeftPressed      = false;
            bool digitalStickRightLastPressed = false;
            bool digitalStickRightPressed     = false;

            foreach (KeyValuePair <int, int> binding in bindings)
            {
                if (binding.Key == (int)Xbox360StorageButtons.AnalogStick)
                {
                    AnalogStickBinding analogStickBinding = (AnalogStickBinding)Enum.Parse(typeof(AnalogStickBinding), binding.Value.ToString());

                    switch (analogStickBinding)
                    {
                    case AnalogStickBinding.LeftStick:
                        analogStickAxisX  = Xbox360Axes.LeftThumbX;
                        analogStickAxisY  = Xbox360Axes.LeftThumbY;
                        digitalStickAxisX = Xbox360Axes.RightThumbX;
                        digitalStickAxisY = Xbox360Axes.RightThumbY;

                        break;

                    case AnalogStickBinding.RightStick:
                        analogStickAxisX  = Xbox360Axes.RightThumbX;
                        analogStickAxisY  = Xbox360Axes.RightThumbY;
                        digitalStickAxisX = Xbox360Axes.LeftThumbX;
                        digitalStickAxisY = Xbox360Axes.LeftThumbY;

                        break;
                    }
                }

                if (binding.Value == (int)Key.JoystickButton)
                {
                    joystickButton0 = (Xbox360Buttons)Enum.Parse(typeof(Xbox360Buttons), binding.Key.ToString());
                }
            }

            controller.Connect();
            message.Report("Virtual Xbox 360 controller created!");

            Xbox360Report report = new Xbox360Report();

            while (true)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    controller.Disconnect();
                    return;
                }

                joystick.Poll();

                JoystickUpdate[] updates = joystick.GetBufferedData();

                foreach (JoystickUpdate update in updates)
                {
                    int value = (update.Value - 32767);

                    if (update.Offset == JoystickOffset.X || update.Offset == JoystickOffset.Y || update.Offset == JoystickOffset.Buttons0)
                    {
                        if (analogStickAxisX != null && analogStickAxisX.HasValue && analogStickAxisY != null && analogStickAxisY.HasValue)
                        {
                            if (update.Offset == JoystickOffset.X)
                            {
                                short x = getConstrainedValue(value);

                                report.SetAxis(analogStickAxisX.Value, x);
                                xUpdate.Report(x.ToString());
                                rawXUpdate.Report((update.Value - 32767).ToString());
                            }

                            if (update.Offset == JoystickOffset.Y)
                            {
                                short y = getConstrainedValue(value * -1);

                                report.SetAxis(analogStickAxisY.Value, y);
                                yUpdate.Report(y.ToString());
                                rawYUpdate.Report(((update.Value - 32767) * -1).ToString());
                            }
                        }

                        if (update.Offset == JoystickOffset.Buttons0 && joystickButton0 != null && joystickButton0.HasValue)
                        {
                            bool buttonValue = update.Value > 0 ? true : false;

                            report.SetButtonState(joystickButton0.Value, buttonValue);
                        }
                    }

                    message.Report(update.Offset.ToString() + ": " + value.ToString());
                }

                keyboard.Poll();

                KeyboardUpdate[] keyboardUpdates = keyboard.GetBufferedData();

                foreach (KeyboardUpdate keyboardUpdate in keyboardUpdates)
                {
                    foreach (KeyValuePair <int, int> binding in bindings)
                    {
                        if ((int)keyboardUpdate.Key == binding.Value)
                        {
                            Xbox360Buttons?button = null;

                            switch (binding.Key)
                            {
                            case (int)Xbox360StorageButtons.Guide:
                                button = Xbox360Buttons.Guide;
                                break;

                            case (int)Xbox360StorageButtons.Start:
                                button = Xbox360Buttons.Start;
                                break;

                            case (int)Xbox360StorageButtons.Back:
                                button = Xbox360Buttons.Back;
                                break;

                            case (int)Xbox360StorageButtons.LeftShoulder:
                                button = Xbox360Buttons.LeftShoulder;
                                break;

                            case (int)Xbox360StorageButtons.RightShoulder:
                                button = Xbox360Buttons.RightShoulder;
                                break;

                            case (int)Xbox360StorageButtons.LeftTrigger:
                                leftTriggerPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;

                            case (int)Xbox360StorageButtons.RightTrigger:
                                rightTriggerPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;

                            case (int)Xbox360StorageButtons.A:
                                button = Xbox360Buttons.A;
                                break;

                            case (int)Xbox360StorageButtons.B:
                                button = Xbox360Buttons.B;
                                break;

                            case (int)Xbox360StorageButtons.X:
                                button = Xbox360Buttons.X;
                                break;

                            case (int)Xbox360StorageButtons.Y:
                                button = Xbox360Buttons.Y;
                                break;

                            case (int)Xbox360StorageButtons.Up:
                                button = Xbox360Buttons.Up;
                                break;

                            case (int)Xbox360StorageButtons.Down:
                                button = Xbox360Buttons.Down;
                                break;

                            case (int)Xbox360StorageButtons.Left:
                                button = Xbox360Buttons.Left;
                                break;

                            case (int)Xbox360StorageButtons.Right:
                                button = Xbox360Buttons.Right;
                                break;

                            case (int)Xbox360StorageButtons.LeftThumb:
                                button = Xbox360Buttons.LeftThumb;
                                break;

                            case (int)Xbox360StorageButtons.RightThumb:
                                button = Xbox360Buttons.RightThumb;
                                break;

                            case (int)Xbox360StorageButtons.DigitalStickUp:
                                digitalStickUpPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;

                            case (int)Xbox360StorageButtons.DigitalStickDown:
                                digitalStickDownPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;

                            case (int)Xbox360StorageButtons.DigitalStickLeft:
                                digitalStickLeftPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;

                            case (int)Xbox360StorageButtons.DigitalStickRight:
                                digitalStickRightPressed = keyboardUpdate.Value == 128 ? true : false;
                                break;
                            }

                            if (button != null && button.HasValue)
                            {
                                bool pressed = keyboardUpdate.Value == 128 ? true : false;

                                report.SetButtonState(button.Value, pressed);
                            }

                            message.Report("Keyboard - Key: " + keyboardUpdate.Key + " Value: " + keyboardUpdate.Value);
                        }
                    }
                }

                if (leftTriggerPressed != leftTriggerLastPressed)
                {
                    if (leftTriggerPressed)
                    {
                        report.LeftTrigger = 255;
                    }
                    else
                    {
                        report.LeftTrigger = 0;
                    }

                    leftTriggerLastPressed = leftTriggerPressed;
                }

                if (rightTriggerPressed != rightTriggerLastPressed)
                {
                    if (rightTriggerPressed)
                    {
                        report.RightTrigger = 255;
                    }
                    else
                    {
                        report.RightTrigger = 0;
                    }

                    rightTriggerLastPressed = rightTriggerPressed;
                }

                if (digitalStickUpPressed != digitalStickUpLastPressed)
                {
                    if (digitalStickUpPressed)
                    {
                        report.SetAxis(digitalStickAxisY.Value, 32767);
                    }
                    else
                    {
                        report.SetAxis(digitalStickAxisY.Value, 0);
                    }

                    digitalStickUpLastPressed = digitalStickUpPressed;
                }

                if (digitalStickDownPressed != digitalStickDownLastPressed)
                {
                    if (digitalStickDownPressed)
                    {
                        report.SetAxis(digitalStickAxisY.Value, -32768);
                    }
                    else
                    {
                        report.SetAxis(digitalStickAxisY.Value, 0);
                    }

                    digitalStickDownLastPressed = digitalStickDownPressed;
                }

                if (digitalStickLeftPressed != digitalStickLeftLastPressed)
                {
                    if (digitalStickLeftPressed)
                    {
                        report.SetAxis(digitalStickAxisX.Value, -32768);
                    }
                    else
                    {
                        report.SetAxis(digitalStickAxisX.Value, 0);
                    }

                    digitalStickLeftLastPressed = digitalStickLeftPressed;
                }

                if (digitalStickRightPressed != digitalStickRightLastPressed)
                {
                    if (digitalStickRightPressed)
                    {
                        report.SetAxis(digitalStickAxisX.Value, 32767);
                    }
                    else
                    {
                        report.SetAxis(digitalStickAxisX.Value, 0);
                    }

                    digitalStickRightLastPressed = digitalStickRightPressed;
                }

                controller.SendReport(report);
                Thread.Sleep(1);
            }
        }
コード例 #30
0
 public Xbox360OutDevice(ViGEmClient client)
 {
     cont   = new Xbox360Controller(client);
     report = new Xbox360Report();
 }
コード例 #31
0
 public virtual bool GetButtonUp(Xbox360Controller.eXbox360ButtonId buttonId)
 {
     return GetButtonUp((BaseController.eButtonId)buttonId);
 }
コード例 #32
0
 protected void AddJoystickButtonMap(Xbox360Controller.eXbox360ButtonId buttonId, int inputKey)
 {
     AddJoystickButtonMap((BaseController.eButtonId)buttonId, inputKey);
 }