forked from MeloNX/MeloNX
Add Controller View into Settings and more
This commit is contained in:
parent
1735216de6
commit
a61e2a3992
@ -631,6 +631,10 @@
|
|||||||
"$(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/XCFrameworks",
|
"$(PROJECT_DIR)/MeloNX/Dependencies/XCFrameworks",
|
||||||
|
"$(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 = 0.0.8;
|
MARKETING_VERSION = 0.0.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
|
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
|
||||||
@ -774,6 +778,10 @@
|
|||||||
"$(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/XCFrameworks",
|
"$(PROJECT_DIR)/MeloNX/Dependencies/XCFrameworks",
|
||||||
|
"$(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 = 0.0.8;
|
MARKETING_VERSION = 0.0.8;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
|
PRODUCT_BUNDLE_IDENTIFIER = com.stossy11.MeloNX;
|
||||||
|
Binary file not shown.
@ -14,8 +14,8 @@
|
|||||||
filePath = "MeloNX/Views/GamesList/GameListView.swift"
|
filePath = "MeloNX/Views/GamesList/GameListView.swift"
|
||||||
startingColumnNumber = "9223372036854775807"
|
startingColumnNumber = "9223372036854775807"
|
||||||
endingColumnNumber = "9223372036854775807"
|
endingColumnNumber = "9223372036854775807"
|
||||||
startingLineNumber = "224"
|
startingLineNumber = "195"
|
||||||
endingLineNumber = "224"
|
endingLineNumber = "195"
|
||||||
landmarkName = "loadGames()"
|
landmarkName = "loadGames()"
|
||||||
landmarkType = "7">
|
landmarkType = "7">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
|
@ -39,8 +39,8 @@ struct ContentView: View {
|
|||||||
_config = State(initialValue: defaultConfig)
|
_config = State(initialValue: defaultConfig)
|
||||||
|
|
||||||
let defaultSettings: [MoltenVKSettings] = [
|
let defaultSettings: [MoltenVKSettings] = [
|
||||||
// MoltenVKSettings(string: "MVK_CONFIG_MAX_ACTIVE_METAL_COMMAND_BUFFERS_PER_QUEUE", value: "512"),
|
// MoltenVKSettings(string: "MVK_CONFIG_MAX_ACTIVE_METAL_COMMAND_BUFFERS_PER_QUEUE", value: "128"),
|
||||||
MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS", value: "0"),
|
MoltenVKSettings(string: "MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS", value: "1"),
|
||||||
MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "1"),
|
MoltenVKSettings(string: "MVK_CONFIG_PREFILL_METAL_COMMAND_BUFFERS", value: "1"),
|
||||||
MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "1"),
|
MoltenVKSettings(string: "MVK_USE_METAL_PRIVATE_API", value: "1"),
|
||||||
MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1"),
|
MoltenVKSettings(string: "MVK_CONFIG_RESUME_LOST_DEVICE", value: "1"),
|
||||||
|
@ -9,35 +9,6 @@ import SwiftUI
|
|||||||
import UniformTypeIdentifiers
|
import UniformTypeIdentifiers
|
||||||
|
|
||||||
|
|
||||||
struct MainTabView: View {
|
|
||||||
@Binding var startemu: URL?
|
|
||||||
@Binding var config: Ryujinx.Configuration
|
|
||||||
@Binding var MVKconfig: [MoltenVKSettings]
|
|
||||||
@Binding var controllersList: [Controller]
|
|
||||||
@Binding var currentControllers: [Controller]
|
|
||||||
|
|
||||||
@Binding var onscreencontroller: Controller
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
TabView {
|
|
||||||
GameLibraryView(startemu: $startemu)
|
|
||||||
.tabItem {
|
|
||||||
Label("Games", systemImage: "gamecontroller.fill")
|
|
||||||
}
|
|
||||||
|
|
||||||
SelectControllerView(controllersList: $controllersList, currentControllers: $currentControllers, onscreencontroller: $onscreencontroller)
|
|
||||||
.tabItem {
|
|
||||||
Label("Controllers", systemImage: "gamecontroller.fill")
|
|
||||||
}
|
|
||||||
|
|
||||||
SettingsView(config: $config, MoltenVKSettings: $MVKconfig)
|
|
||||||
.tabItem {
|
|
||||||
Label("Settings", systemImage: "gear")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct GameLibraryView: View {
|
struct GameLibraryView: View {
|
||||||
@Binding var startemu: URL?
|
@Binding var startemu: URL?
|
||||||
@State private var games: [Game] = []
|
@State private var games: [Game] = []
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
//
|
|
||||||
// SelectControllerView.swift
|
|
||||||
// MeloNX
|
|
||||||
//
|
|
||||||
// Created by Stossy11 on 9/12/2024.
|
|
||||||
//
|
|
||||||
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct SelectControllerView: View {
|
|
||||||
|
|
||||||
@Binding var controllersList: [Controller]
|
|
||||||
@Binding var currentControllers: [Controller]
|
|
||||||
|
|
||||||
@Binding var onscreencontroller: Controller
|
|
||||||
|
|
||||||
var body: some View {
|
|
||||||
|
|
||||||
List {
|
|
||||||
|
|
||||||
Section {
|
|
||||||
ForEach(controllersList, id: \.self) { controller in
|
|
||||||
controllerRow(for: controller)
|
|
||||||
}
|
|
||||||
} footer: {
|
|
||||||
Text("If no controllers are selected, the keyboard will be used.")
|
|
||||||
.font(.footnote)
|
|
||||||
.foregroundColor(.gray)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private func controllerRow(for controller: Controller) -> some View {
|
|
||||||
HStack {
|
|
||||||
Button(controller.name) {
|
|
||||||
toggleController(controller)
|
|
||||||
}
|
|
||||||
Spacer()
|
|
||||||
if currentControllers.contains(where: { $0.id == controller.id }) {
|
|
||||||
Image(systemName: "checkmark.circle.fill")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func toggleController(_ controller: Controller) {
|
|
||||||
if currentControllers.contains(where: { $0.id == controller.id }) {
|
|
||||||
currentControllers.removeAll(where: { $0.id == controller.id })
|
|
||||||
} else {
|
|
||||||
currentControllers.append(controller)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -10,6 +10,12 @@ import SwiftUI
|
|||||||
struct SettingsView: View {
|
struct SettingsView: View {
|
||||||
@Binding var config: Ryujinx.Configuration
|
@Binding var config: Ryujinx.Configuration
|
||||||
@Binding var MoltenVKSettings: [MoltenVKSettings]
|
@Binding var MoltenVKSettings: [MoltenVKSettings]
|
||||||
|
|
||||||
|
@Binding var controllersList: [Controller]
|
||||||
|
@Binding var currentControllers: [Controller]
|
||||||
|
|
||||||
|
@Binding var onscreencontroller: Controller
|
||||||
|
|
||||||
@AppStorage("ignoreJIT") var ignoreJIT: Bool = false
|
@AppStorage("ignoreJIT") var ignoreJIT: Bool = false
|
||||||
|
|
||||||
var memoryManagerModes = [
|
var memoryManagerModes = [
|
||||||
@ -30,7 +36,7 @@ struct SettingsView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationStack {
|
iOSNav {
|
||||||
List {
|
List {
|
||||||
// Graphics & Performance
|
// Graphics & Performance
|
||||||
Section {
|
Section {
|
||||||
@ -114,9 +120,41 @@ struct SettingsView: View {
|
|||||||
} footer: {
|
} footer: {
|
||||||
Text("Fine-tune graphics and performance to suit your device and preferences.")
|
Text("Fine-tune graphics and performance to suit your device and preferences.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Input Selector
|
||||||
|
Section {
|
||||||
|
ForEach(controllersList) { controller in
|
||||||
|
var customBinding: Binding<Bool> {
|
||||||
|
Binding(
|
||||||
|
get: { currentControllers.contains(controller) },
|
||||||
|
set: { bool in
|
||||||
|
if !bool {
|
||||||
|
currentControllers.removeAll(where: { $0.id == controller.id })
|
||||||
|
} else {
|
||||||
|
currentControllers.append(controller)
|
||||||
|
}
|
||||||
|
// toggleController(controller)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Toggle(isOn: customBinding) {
|
||||||
|
labelWithIcon(controller.name, iconName: "")
|
||||||
|
}
|
||||||
|
.tint(.blue)
|
||||||
|
}
|
||||||
|
} header: {
|
||||||
|
Text("Input Selector")
|
||||||
|
.font(.title3.weight(.semibold))
|
||||||
|
.textCase(nil)
|
||||||
|
.headerProminence(.increased)
|
||||||
|
} footer: {
|
||||||
|
Text("Select input devices and on-screen controls to play with.")
|
||||||
|
}
|
||||||
|
|
||||||
// Input Settings
|
// Input Settings
|
||||||
Section {
|
Section {
|
||||||
|
|
||||||
Toggle(isOn: $config.listinputids) {
|
Toggle(isOn: $config.listinputids) {
|
||||||
labelWithIcon("List Input IDs", iconName: "list.bullet")
|
labelWithIcon("List Input IDs", iconName: "list.bullet")
|
||||||
}
|
}
|
||||||
@ -126,6 +164,7 @@ struct SettingsView: View {
|
|||||||
labelWithIcon("On-Screen Controller (Demo)", iconName: "hand.draw")
|
labelWithIcon("On-Screen Controller (Demo)", iconName: "hand.draw")
|
||||||
}
|
}
|
||||||
.tint(.blue)
|
.tint(.blue)
|
||||||
|
.disabled(true)
|
||||||
} header: {
|
} header: {
|
||||||
Text("Input Settings")
|
Text("Input Settings")
|
||||||
.font(.title3.weight(.semibold))
|
.font(.title3.weight(.semibold))
|
||||||
@ -230,6 +269,14 @@ struct SettingsView: View {
|
|||||||
.navigationViewStyle(.stack)
|
.navigationViewStyle(.stack)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func toggleController(_ controller: Controller) {
|
||||||
|
if currentControllers.contains(where: { $0.id == controller.id }) {
|
||||||
|
currentControllers.removeAll(where: { $0.id == controller.id })
|
||||||
|
} else {
|
||||||
|
currentControllers.append(controller)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func saveSettings() {
|
func saveSettings() {
|
||||||
do {
|
do {
|
||||||
let encoder = JSONEncoder()
|
let encoder = JSONEncoder()
|
||||||
@ -261,9 +308,11 @@ struct SettingsView: View {
|
|||||||
@ViewBuilder
|
@ViewBuilder
|
||||||
private func labelWithIcon(_ text: String, iconName: String) -> some View {
|
private func labelWithIcon(_ text: String, iconName: String) -> some View {
|
||||||
HStack(spacing: 8) {
|
HStack(spacing: 8) {
|
||||||
Image(systemName: iconName)
|
if !iconName.isEmpty {
|
||||||
.symbolRenderingMode(.hierarchical)
|
Image(systemName: iconName)
|
||||||
.foregroundStyle(.blue)
|
.symbolRenderingMode(.hierarchical)
|
||||||
|
.foregroundStyle(.blue)
|
||||||
|
}
|
||||||
Text(text)
|
Text(text)
|
||||||
}
|
}
|
||||||
.font(.body)
|
.font(.body)
|
||||||
|
34
src/MeloNX/MeloNX/Views/TabView/TabView.swift
Normal file
34
src/MeloNX/MeloNX/Views/TabView/TabView.swift
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// TabView.swift
|
||||||
|
// MeloNX
|
||||||
|
//
|
||||||
|
// Created by Stossy11 on 10/12/2024.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
import UniformTypeIdentifiers
|
||||||
|
|
||||||
|
|
||||||
|
struct MainTabView: View {
|
||||||
|
@Binding var startemu: URL?
|
||||||
|
@Binding var config: Ryujinx.Configuration
|
||||||
|
@Binding var MVKconfig: [MoltenVKSettings]
|
||||||
|
@Binding var controllersList: [Controller]
|
||||||
|
@Binding var currentControllers: [Controller]
|
||||||
|
|
||||||
|
@Binding var onscreencontroller: Controller
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
TabView {
|
||||||
|
GameLibraryView(startemu: $startemu)
|
||||||
|
.tabItem {
|
||||||
|
Label("Games", systemImage: "gamecontroller.fill")
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsView(config: $config, MoltenVKSettings: $MVKconfig, controllersList: $controllersList, currentControllers: $currentControllers, onscreencontroller: $onscreencontroller)
|
||||||
|
.tabItem {
|
||||||
|
Label("Settings", systemImage: "gear")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user