diff --git a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj index 68b5b44e3..40576d397 100644 --- a/src/MeloNX/MeloNX.xcodeproj/project.pbxproj +++ b/src/MeloNX/MeloNX.xcodeproj/project.pbxproj @@ -554,6 +554,11 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; @@ -646,6 +651,11 @@ "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", + "$(PROJECT_DIR)/MeloNX/Dependencies/Dynamic\\ Libraries", ); MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX; diff --git a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate index 27a190214..ebffcfcce 100644 Binary files a/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate and b/src/MeloNX/MeloNX.xcodeproj/project.xcworkspace/xcuserdata/stossy11.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift index 325a8719d..6f589cf5f 100644 --- a/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift +++ b/src/MeloNX/MeloNX/Core/Swift/Ryujinx.swift @@ -11,8 +11,8 @@ import SDL2 import GameController struct Controller: Identifiable, Hashable { - let id: String - let name: String + var id: String + var name: String } struct iOSNav: View { @@ -205,6 +205,7 @@ class Ryujinx { func getConnectedControllers() -> [Controller] { + guard let jsonPtr = get_game_controllers() else { return [] } diff --git a/src/MeloNX/MeloNX/Views/ContentView.swift b/src/MeloNX/MeloNX/Views/ContentView.swift index 04de504c0..96eeda36b 100644 --- a/src/MeloNX/MeloNX/Views/ContentView.swift +++ b/src/MeloNX/MeloNX/Views/ContentView.swift @@ -25,6 +25,7 @@ struct ContentView: View { @State private var config: Ryujinx.Configuration @State private var settings: [MoltenVKSettings] @State private var isVirtualControllerActive: Bool = false + @State var onscreencontroller: Controller? // MARK: - Initialization init() { @@ -89,11 +90,9 @@ struct ContentView: View { Section("Controller") { Button("Refresh", action: refreshControllersList) - + Divider() ForEach(controllersList, id: \.self) { controller in - if controller.name != "Apple Touch Controller" { - controllerRow(for: controller) - } + controllerRow(for: controller) } } } @@ -128,15 +127,11 @@ struct ContentView: View { virtualController = GCVirtualController(configuration: configuration) virtualController?.connect() - controllersList.removeAll(where: { $0.name == "Apple Touch Controller" }) } private func destroyVirtualController() { virtualController?.disconnect() virtualController = nil - - // Remove virtual controller from current controllers - controllersList.removeAll(where: { $0.name == "Apple Touch Controller" }) } // MARK: - Helper Methods @@ -152,33 +147,45 @@ struct ContentView: View { private func setupEmulation() { virtualController?.disconnect() - - controllerCallback = { - DispatchQueue.main.async { - controllersList = Ryujinx.shared.getConnectedControllers() - currentControllers.removeAll(where: { $0.name == "Apple Touch Controller" }) - if controllersList.count == 2, - controllersList.contains(where: { $0.name == "Apple Touch Controller" }) { - currentControllers.append(controllersList[1]) + if controllersList.first(where: { $0 == onscreencontroller}) != nil { + controllerCallback = { + DispatchQueue.main.async { + controllersList = Ryujinx.shared.getConnectedControllers() + + print(currentControllers) + start(displayid: 1) } - + } + + + showVirtualController() + } else { + + DispatchQueue.main.async { print(currentControllers) start(displayid: 1) } } - - - showVirtualController() } private func refreshControllersList() { Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { _ in controllersList = Ryujinx.shared.getConnectedControllers() - controllersList.removeAll(where: { $0.id == "0" }) + var controller = controllersList.first(where: { $0.name == "Apple Touch Controller" }) controllersList.removeAll(where: { $0.name == "Apple Touch Controller" }) - if let controller = controllersList.first, !controllersList.isEmpty { + controller?.name = "On-Screen Controller" + + onscreencontroller = controller + + controllersList.append(controller!) + // controllersList.removeAll(where: { $0.name == "Apple Touch Controller" }) + if controllersList.count > 2 { + let controller = controllersList[2] + currentControllers.append(controller) + + } else if let controller = controllersList.first(where: { $0.id == controller?.id }), !controllersList.isEmpty { currentControllers.append(controller) } } diff --git a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs index 95fc72492..6bb5a9875 100644 --- a/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/DescriptorSetUpdater.cs @@ -110,7 +110,7 @@ namespace Ryujinx.Graphics.Vulkan _textures.AsSpan().Fill(initialImageInfo); _images.AsSpan().Fill(initialImageInfo); - if (gd.Capabilities.SupportsNullDescriptors && !OperatingSystem.IsIOS()) + if (gd.Capabilities.SupportsNullDescriptors) { // If null descriptors are supported, we can pass null as the handle. _dummyBuffer = null;