From 4226051c38c39f7fcde42a4d04ad95677ba2d724 Mon Sep 17 00:00:00 2001 From: Ian Clawson Date: Sat, 3 Jul 2021 16:26:25 -0600 Subject: [PATCH 1/2] adds additional agnostic MFi inputs --- .../MFi/MFiGameController.swift | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/DeltaCore/Game Controllers/MFi/MFiGameController.swift b/DeltaCore/Game Controllers/MFi/MFiGameController.swift index d46a08a..9afa1ce 100644 --- a/DeltaCore/Game Controllers/MFi/MFiGameController.swift +++ b/DeltaCore/Game Controllers/MFi/MFiGameController.swift @@ -18,6 +18,8 @@ extension MFiGameController public enum Input: String, Codable { case menu + case options + case home case up case down @@ -41,9 +43,11 @@ extension MFiGameController case leftShoulder case leftTrigger + case leftThumbstickButton case rightShoulder case rightTrigger + case rightThumbstickButton } } @@ -158,23 +162,21 @@ public class MFiGameController: NSObject, GameController } } - if let gamepad = self.controller.gamepad - { - gamepad.buttonA.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.a, pressed) } - gamepad.buttonB.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.b, pressed) } - gamepad.buttonX.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.x, pressed) } - gamepad.buttonY.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.y, pressed) } - gamepad.leftShoulder.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.leftShoulder, pressed) } - gamepad.rightShoulder.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.rightShoulder, pressed) } - - gamepad.dpad.up.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.up, pressed) } - gamepad.dpad.down.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.down, pressed) } - gamepad.dpad.left.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.left, pressed) } - gamepad.dpad.right.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.right, pressed) } - } - if let extendedGamepad = self.controller.extendedGamepad { + + extendedGamepad.buttonA.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.a, pressed) } + extendedGamepad.buttonB.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.b, pressed) } + extendedGamepad.buttonX.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.x, pressed) } + extendedGamepad.buttonY.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.y, pressed) } + extendedGamepad.leftShoulder.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.leftShoulder, pressed) } + extendedGamepad.rightShoulder.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.rightShoulder, pressed) } + + extendedGamepad.dpad.up.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.up, pressed) } + extendedGamepad.dpad.down.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.down, pressed) } + extendedGamepad.dpad.left.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.left, pressed) } + extendedGamepad.dpad.right.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.right, pressed) } + extendedGamepad.leftTrigger.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.leftTrigger, pressed) } extendedGamepad.rightTrigger.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.rightTrigger, pressed) } @@ -190,6 +192,22 @@ public class MFiGameController: NSObject, GameController extendedGamepad.rightThumbstick.yAxis.valueChangedHandler = { (axis, value) in thumbstickChangedHandler(.rightThumbstickDown, .rightThumbstickUp, value) } + + if #available(iOS 12.1, *) + { + extendedGamepad.leftThumbstickButton?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.leftThumbstickButton, pressed) } + extendedGamepad.rightThumbstickButton?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.rightThumbstickButton, pressed) } + } + + if #available(iOS 13, *) + { + extendedGamepad.buttonOptions?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.options, pressed) } + } + + if #available(iOS 14, *) + { + extendedGamepad.buttonHome?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.home, pressed) } + } } } } From fdfb08073a55247e8b39671d23085eaecb0358c7 Mon Sep 17 00:00:00 2001 From: Ian Clawson Date: Mon, 5 Jul 2021 09:40:06 -0600 Subject: [PATCH 2/2] adds some ps/xbox specific button support --- .../MFi/MFiGameController.swift | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/DeltaCore/Game Controllers/MFi/MFiGameController.swift b/DeltaCore/Game Controllers/MFi/MFiGameController.swift index 8a0fd86..1f57414 100644 --- a/DeltaCore/Game Controllers/MFi/MFiGameController.swift +++ b/DeltaCore/Game Controllers/MFi/MFiGameController.swift @@ -48,6 +48,15 @@ extension MFiGameController case rightShoulder case rightTrigger case rightThumbstickButton + + // specific to GCDualShockGamepad/GCDualSenseGamepad + case psTouchpadButton + + // specific to GCXboxGamepad + case xboxPaddleButton1 + case xboxPaddleButton2 + case xboxPaddleButton3 + case xboxPaddleButton4 } } @@ -207,6 +216,27 @@ public class MFiGameController: NSObject, GameController if #available(iOS 14, *) { extendedGamepad.buttonHome?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.home, pressed) } + + if let dualShockGamepad = extendedGamepad as? GCDualShockGamepad + { + dualShockGamepad.touchpadButton.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.psTouchpadButton, pressed) } + } + + if let xboxGamepad = extendedGamepad as? GCXboxGamepad + { + xboxGamepad.paddleButton1?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.xboxPaddleButton1, pressed) } + xboxGamepad.paddleButton2?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.xboxPaddleButton2, pressed) } + xboxGamepad.paddleButton3?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.xboxPaddleButton3, pressed) } + xboxGamepad.paddleButton4?.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.xboxPaddleButton4, pressed) } + } + } + + if #available(iOS 14.5, *) + { + if let dualSenseGamepad = extendedGamepad as? GCDualSenseGamepad + { + dualSenseGamepad.touchpadButton.pressedChangedHandler = { (button, value, pressed) in inputChangedHandler(.psTouchpadButton, pressed) } + } } } }