// // NewGameView.swift // App // // Created by etudiant2 on 21/05/2025. // import SwiftUI import PhotosUI struct NewGameView: View { @StateObject private var vm: NewGameVM = NewGameVM() @StateObject private var p1: PlayerSettingsVM = PlayerSettingsVM(type: .Human) @StateObject private var p2: PlayerSettingsVM = PlayerSettingsVM(type: .AISimpleNegaMax) var body: some View { VStack { Form { Section(header: Label("generic.player1.name", systemImage: "person")) { PlayerSectionView(settings: p1) } Section(header: Label("generic.player2.name", systemImage: "person")) { PlayerSectionView(settings: p2) } HStack { Picker("newGame.rules.title", systemImage: "slider.horizontal.3", selection: $vm.rulesType) { Text("generic.rules.classic.name").tag(RulesType.Classic) } Button(action: { // TODO }) { Image(systemName: "questionmark.circle") } } Section(header: Label("newGame.dimensions", systemImage: "crop")) { Stepper("newGame.dimensions.width \(vm.width)", value: $vm.width) Stepper("newGame.dimensions.height \(vm.height)", value: $vm.height) Stepper("newGame.dimensions.alignedTokens \(vm.alignedTokens)", value: $vm.alignedTokens) } Section(header: Label("newGame.timeLimit", systemImage: "stopwatch")) { } Button("newGame.play", systemImage: "play") { // TODO: yes } } } } } private struct PlayerSectionView: View { @ObservedObject private var settings: PlayerSettingsVM @State private var name: String = "" @State private var photo: PhotosPickerItem? = nil var body: some View { Picker("newGame.player.type", selection: $settings.type) { Text("generic.player.type.human").tag(PlayerType.Human) Text("generic.player.type.aiRandom").tag(PlayerType.AIRandom) Text("generic.player.type.aiFinnishHim").tag(PlayerType.AIFinnishHim) Text("generic.player.type.aiSimpleNegaMax").tag(PlayerType.AISimpleNegaMax) } let binding: Binding = if (settings.type == .Human) { $name } else { // FIXME: make text field readonly .constant("TODO constant name") } TextField("newGame.player.name", text: binding) // TODO: MacOS //.textInputSuggestions(isEnabled: true) { // //} // TODO: actual photo support Image(systemName: "camera.viewfinder").overlay { PhotosPicker(selection: $photo) { Text("newGame.player.photo.picker") } } } init(settings: PlayerSettingsVM) { self.settings = settings } } #Preview { NewGameView() }