Exemple #1
0
        public static Tuple <Ps4Manager, Timer> GetManagerWithTimedPoll(int ms, Action <Ps4Controller> onControllerConnected)
        {
            var poll    = new Timer();
            var manager = new Ps4Manager(onControllerConnected);

            poll.Elapsed  += (s, e) => manager.PollDevices();
            poll.Interval  = ms;
            poll.AutoReset = true;
            poll.Enabled   = true;
            return(Tuple.Create(manager, poll));
        }
        public static void Initialize(Game game, int ps4PollIntervalInFrames)
        {
            game.Exiting += (s, e) =>
            {
                foreach (var controller in _controllers)
                {
                    //Make sure any native handles are cleaned up.
                    if (controller is Ps4Controller ps4)
                    {
                        ps4.Close();
                    }
                }
            };

            for (var i = 0; i < GamePad.MaximumGamePadCount; i++)
            {
                var controller = new XInputController(i);
                _controllers.Add(controller);
                controller.Connected    += (s, e) => ControllerConnected(null, (IController)s);
                controller.Disconnected += (s, e) => ControllerDisconnected(null, (IController)s);
            }

#if Windows
            _pollInterval = ps4PollIntervalInFrames;
            if (_pollInterval > 0)
            {
                _ps4Manager = new Ps4Manager((controller) =>
                {
                    var index = _controllers.Add(controller);
                    controller.SetIndex(index);
                    ControllerConnected?.Invoke(null, controller);
                    controller.Disconnected += (s, e) =>
                    {
                        var c = (IController)s;
                        ControllerDisconnected?.Invoke(null, c);
                        _controllers.FastRemove(c.Index);
                    };
                }, false);
                _frames = _pollInterval;
            }
#endif
        }