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 }