Merge pull request 'LanguageApp' (#20) from LanguageApp into dev

Reviewed-on: #20
pull/22/head^2
Louis DUFOUR 11 months ago
commit bbdb62a4ed

Binary file not shown.

@ -7,12 +7,15 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
16820AB62C09C06A00C7F360 /* ItemCollectionParty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16820AB52C09C06A00C7F360 /* ItemCollectionParty.swift */; }; 168CD4FB2C0625A400419510 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 168CD4F92C0625A400419510 /* fr.lproj */; };
16820AB92C09C81500C7F360 /* PartyEnregistery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16820AB82C09C81500C7F360 /* PartyEnregistery.swift */; }; 168CD4FC2C0625A400419510 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 168CD4FA2C0625A400419510 /* en.lproj */; };
16820ABB2C09C85000C7F360 /* Stub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16820ABA2C09C85000C7F360 /* Stub.swift */; }; 168CD4FF2C06265B00419510 /* LanguageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168CD4FE2C06265B00419510 /* LanguageSettings.swift */; };
82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59E82C045D1100ADEE24 /* GameScene.swift */; }; 82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59E82C045D1100ADEE24 /* GameScene.swift */; };
82CE59EB2C045E3800ADEE24 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EA2C045E3800ADEE24 /* GameView.swift */; }; 82CE59EB2C045E3800ADEE24 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EA2C045E3800ADEE24 /* GameView.swift */; };
82CE59EF2C0460E500ADEE24 /* SpriteMoople.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */; }; 82CE59EF2C0460E500ADEE24 /* SpriteMoople.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */; };
82F9D3312BFE3A9F009EDFAF /* HistoryGameDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F9D3302BFE3A9F009EDFAF /* HistoryGameDetail.swift */; };
82F9D3332BFE3B12009EDFAF /* HistoryHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F9D3322BFE3B12009EDFAF /* HistoryHeader.swift */; };
82F9D3362BFE3B3C009EDFAF /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82F9D3352BFE3B3C009EDFAF /* HistoryView.swift */; };
C20310D62BFCB5FB0031657D /* PickerComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D52BFCB5FB0031657D /* PickerComponent.swift */; }; C20310D62BFCB5FB0031657D /* PickerComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D52BFCB5FB0031657D /* PickerComponent.swift */; };
C20310D82BFCC2410031657D /* GeneralParametersMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D72BFCC2410031657D /* GeneralParametersMenuView.swift */; }; C20310D82BFCC2410031657D /* GeneralParametersMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D72BFCC2410031657D /* GeneralParametersMenuView.swift */; };
C20310DA2BFCC8600031657D /* ToggleComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D92BFCC8600031657D /* ToggleComponent.swift */; }; C20310DA2BFCC8600031657D /* ToggleComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C20310D92BFCC8600031657D /* ToggleComponent.swift */; };
@ -51,12 +54,15 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
16820AB52C09C06A00C7F360 /* ItemCollectionParty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemCollectionParty.swift; sourceTree = "<group>"; }; 168CD4F92C0625A400419510 /* fr.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = fr.lproj; sourceTree = "<group>"; };
16820AB82C09C81500C7F360 /* PartyEnregistery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PartyEnregistery.swift; sourceTree = "<group>"; }; 168CD4FA2C0625A400419510 /* en.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = en.lproj; sourceTree = "<group>"; };
16820ABA2C09C85000C7F360 /* Stub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stub.swift; sourceTree = "<group>"; }; 168CD4FE2C06265B00419510 /* LanguageSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSettings.swift; sourceTree = "<group>"; };
82CE59E82C045D1100ADEE24 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; }; 82CE59E82C045D1100ADEE24 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; };
82CE59EA2C045E3800ADEE24 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = "<group>"; }; 82CE59EA2C045E3800ADEE24 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = "<group>"; };
82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMoople.swift; sourceTree = "<group>"; }; 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMoople.swift; sourceTree = "<group>"; };
82F9D3302BFE3A9F009EDFAF /* HistoryGameDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryGameDetail.swift; sourceTree = "<group>"; };
82F9D3322BFE3B12009EDFAF /* HistoryHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryHeader.swift; sourceTree = "<group>"; };
82F9D3352BFE3B3C009EDFAF /* HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryView.swift; sourceTree = "<group>"; };
C20310D52BFCB5FB0031657D /* PickerComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickerComponent.swift; sourceTree = "<group>"; }; C20310D52BFCB5FB0031657D /* PickerComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickerComponent.swift; sourceTree = "<group>"; };
C20310D72BFCC2410031657D /* GeneralParametersMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralParametersMenuView.swift; sourceTree = "<group>"; }; C20310D72BFCC2410031657D /* GeneralParametersMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralParametersMenuView.swift; sourceTree = "<group>"; };
C20310D92BFCC8600031657D /* ToggleComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleComponent.swift; sourceTree = "<group>"; }; C20310D92BFCC8600031657D /* ToggleComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleComponent.swift; sourceTree = "<group>"; };
@ -105,13 +111,12 @@
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
16820AB72C09C7B700C7F360 /* PartyEnregistery */ = { 168CD4FD2C06264300419510 /* Utils */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
16820ABA2C09C85000C7F360 /* Stub.swift */, 168CD4FE2C06265B00419510 /* LanguageSettings.swift */,
16820AB82C09C81500C7F360 /* PartyEnregistery.swift */,
); );
path = PartyEnregistery; path = Utils;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
8203E9052BF60117005F5C4A /* Frameworks */ = { 8203E9052BF60117005F5C4A /* Frameworks */ = {
@ -139,9 +144,21 @@
path = SKNodes; path = SKNodes;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
82F9D32F2BFE3A75009EDFAF /* History */ = {
isa = PBXGroup;
children = (
82F9D3302BFE3A9F009EDFAF /* HistoryGameDetail.swift */,
82F9D3322BFE3B12009EDFAF /* HistoryHeader.swift */,
82F9D3352BFE3B3C009EDFAF /* HistoryView.swift */,
);
path = History;
sourceTree = "<group>";
};
C205A2AA2BF373360097BD93 = { C205A2AA2BF373360097BD93 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
168CD4FA2C0625A400419510 /* en.lproj */,
168CD4F92C0625A400419510 /* fr.lproj */,
C205A2B52BF373360097BD93 /* ArkitDoushiQi */, C205A2B52BF373360097BD93 /* ArkitDoushiQi */,
C205A2C62BF373380097BD93 /* ArkitDoushiQiTests */, C205A2C62BF373380097BD93 /* ArkitDoushiQiTests */,
C205A2D02BF373380097BD93 /* ArkitDoushiQiUITests */, C205A2D02BF373380097BD93 /* ArkitDoushiQiUITests */,
@ -163,6 +180,7 @@
C205A2B52BF373360097BD93 /* ArkitDoushiQi */ = { C205A2B52BF373360097BD93 /* ArkitDoushiQi */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
168CD4FD2C06264300419510 /* Utils */,
82CE59E52C045C7500ADEE24 /* Game */, 82CE59E52C045C7500ADEE24 /* Game */,
C205A2B62BF373360097BD93 /* ArkitDoushiQiApp.swift */, C205A2B62BF373360097BD93 /* ArkitDoushiQiApp.swift */,
C205A2B82BF373360097BD93 /* ContentView.swift */, C205A2B82BF373360097BD93 /* ContentView.swift */,
@ -175,12 +193,12 @@
C205A2BC2BF373380097BD93 /* Views */ = { C205A2BC2BF373380097BD93 /* Views */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
16820AB72C09C7B700C7F360 /* PartyEnregistery */,
C24DAB5A2C061DAA00681CD0 /* Enum */, C24DAB5A2C061DAA00681CD0 /* Enum */,
C25220F02C00AD7F0026B71F /* Components */, C25220F02C00AD7F0026B71F /* Components */,
C25220EC2C00AC530026B71F /* GameParametersMenu */, C25220EC2C00AC530026B71F /* GameParametersMenu */,
C25220EB2C00A9230026B71F /* GeneralParametersMenu */, C25220EB2C00A9230026B71F /* GeneralParametersMenu */,
C25220EA2C00A9010026B71F /* MainMenu */, C25220EA2C00A9010026B71F /* MainMenu */,
82F9D32F2BFE3A75009EDFAF /* History */,
C205A2BD2BF373380097BD93 /* Preview Assets.xcassets */, C205A2BD2BF373380097BD93 /* Preview Assets.xcassets */,
); );
path = Views; path = Views;
@ -261,7 +279,6 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
C2F3940A2C0463940070B4F6 /* ProfileComponent.swift */, C2F3940A2C0463940070B4F6 /* ProfileComponent.swift */,
16820AB52C09C06A00C7F360 /* ItemCollectionParty.swift */,
); );
path = Visuals; path = Visuals;
sourceTree = "<group>"; sourceTree = "<group>";
@ -352,6 +369,7 @@
knownRegions = ( knownRegions = (
en, en,
Base, Base,
fr,
); );
mainGroup = C205A2AA2BF373360097BD93; mainGroup = C205A2AA2BF373360097BD93;
productRefGroup = C205A2B42BF373360097BD93 /* Products */; productRefGroup = C205A2B42BF373360097BD93 /* Products */;
@ -370,7 +388,9 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
168CD4FC2C0625A400419510 /* en.lproj in Resources */,
C205A2BE2BF373380097BD93 /* Preview Assets.xcassets in Resources */, C205A2BE2BF373380097BD93 /* Preview Assets.xcassets in Resources */,
168CD4FB2C0625A400419510 /* fr.lproj in Resources */,
C205A2BB2BF373380097BD93 /* Assets.xcassets in Resources */, C205A2BB2BF373380097BD93 /* Assets.xcassets in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -397,21 +417,22 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
C205A2B92BF373360097BD93 /* ContentView.swift in Sources */, C205A2B92BF373360097BD93 /* ContentView.swift in Sources */,
16820ABB2C09C85000C7F360 /* Stub.swift in Sources */,
82CE59EF2C0460E500ADEE24 /* SpriteMoople.swift in Sources */, 82CE59EF2C0460E500ADEE24 /* SpriteMoople.swift in Sources */,
82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */, 82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */,
82F9D3312BFE3A9F009EDFAF /* HistoryGameDetail.swift in Sources */,
C24659E92BF60FAA004E80D5 /* ButtonComponent.swift in Sources */, C24659E92BF60FAA004E80D5 /* ButtonComponent.swift in Sources */,
C24DAB5E2C061E3A00681CD0 /* Language.swift in Sources */, C24DAB5E2C061E3A00681CD0 /* Language.swift in Sources */,
C2F394082C0462400070B4F6 /* PhotoButtonComponent.swift in Sources */, C2F394082C0462400070B4F6 /* PhotoButtonComponent.swift in Sources */,
C24659E52BF5FE09004E80D5 /* MainMenu.swift in Sources */, C24659E52BF5FE09004E80D5 /* MainMenu.swift in Sources */,
82F9D3362BFE3B3C009EDFAF /* HistoryView.swift in Sources */,
C20310D82BFCC2410031657D /* GeneralParametersMenuView.swift in Sources */, C20310D82BFCC2410031657D /* GeneralParametersMenuView.swift in Sources */,
168CD4FF2C06265B00419510 /* LanguageSettings.swift in Sources */,
C2F3940B2C0463940070B4F6 /* ProfileComponent.swift in Sources */, C2F3940B2C0463940070B4F6 /* ProfileComponent.swift in Sources */,
16820AB62C09C06A00C7F360 /* ItemCollectionParty.swift in Sources */,
16820AB92C09C81500C7F360 /* PartyEnregistery.swift in Sources */,
C205A2B72BF373360097BD93 /* ArkitDoushiQiApp.swift in Sources */, C205A2B72BF373360097BD93 /* ArkitDoushiQiApp.swift in Sources */,
C24DAB5C2C061DC700681CD0 /* AI.swift in Sources */, C24DAB5C2C061DC700681CD0 /* AI.swift in Sources */,
C25220F32C00AF490026B71F /* EditComponent.swift in Sources */, C25220F32C00AF490026B71F /* EditComponent.swift in Sources */,
C20310D62BFCB5FB0031657D /* PickerComponent.swift in Sources */, C20310D62BFCB5FB0031657D /* PickerComponent.swift in Sources */,
82F9D3332BFE3B12009EDFAF /* HistoryHeader.swift in Sources */,
82CE59EB2C045E3800ADEE24 /* GameView.swift in Sources */, 82CE59EB2C045E3800ADEE24 /* GameView.swift in Sources */,
C20310DA2BFCC8600031657D /* ToggleComponent.swift in Sources */, C20310DA2BFCC8600031657D /* ToggleComponent.swift in Sources */,
C25220EE2C00AC7E0026B71F /* GameParametersMenuView.swift in Sources */, C25220EE2C00AC7E0026B71F /* GameParametersMenuView.swift in Sources */,

@ -17,10 +17,16 @@ enum Theme {
struct ArkitDoushiQiApp: App { struct ArkitDoushiQiApp: App {
@AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("isDarkMode") private var isDarkMode = false
var body: some Scene {
WindowGroup { @StateObject private var languageSettings = LanguageSettings(selectedLanguage: .English)
MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") var body: some Scene {
.preferredColorScheme(isDarkMode ? .dark : .light) WindowGroup {
} MainMenu(
} playButtonText: "Play",
registeredGamesButtonText: "Registered Games",
parametersButtonText: "Parameters"
)
.environmentObject(languageSettings)
}
}
} }

@ -0,0 +1,27 @@
//
// LanguageSettings.swift
// ArkitDoushiQi
//
// Created by Louis DUFOUR on 28/05/2024.
//
import Foundation
class LanguageSettings: ObservableObject {
@Published var selectedLanguage: Language {
didSet {
UserDefaults.standard.set([selectedLanguage.localeIdentifier], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
NotificationCenter.default.post(name: NSNotification.Name("LanguageChanged"), object: nil)
}
}
init(selectedLanguage: Language) {
self.selectedLanguage = selectedLanguage
UserDefaults.standard.set([selectedLanguage.localeIdentifier], forKey: "AppleLanguages")
}
func changeLanguage(to newLanguage: Language) {
selectedLanguage = newLanguage
}
}

@ -8,11 +8,11 @@
import SwiftUI import SwiftUI
struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: View where EnumType.RawValue == String { struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: View where EnumType.RawValue == String {
let title: String let title: LocalizedStringKey
@Binding var selectedOption: EnumType @Binding var selectedOption: EnumType
let options: [EnumType] let options: [EnumType]
init(title: String, selectedOption: Binding<EnumType>, options: [EnumType]) { init(title: LocalizedStringKey, selectedOption: Binding<EnumType>, options: [EnumType]) {
self.title = title self.title = title
self._selectedOption = selectedOption self._selectedOption = selectedOption
self.options = options self.options = options
@ -25,7 +25,8 @@ struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: Vi
Picker(title, selection: $selectedOption) { Picker(title, selection: $selectedOption) {
ForEach(options) { option in ForEach(options) { option in
Text(option.rawValue.description) Text(option.rawValue.description)
.padding() .tag(option)
.padding()
} }
} }
.labelsHidden() .labelsHidden()
@ -49,16 +50,12 @@ struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: Vi
} }
struct PickerComponent_Previews: PreviewProvider { struct PickerComponent_Previews: PreviewProvider {
@State static var selectedItem = AI.RandomAction @State static var selectedItem = Language.English
static var previews: some View { static var previews: some View {
PickerComponent( PickerComponent(
title: "Selectionne une IA :", title: "Select Language:",
selectedOption: $selectedItem, selectedOption: $selectedItem,
options: AI.allCases options: Language.allCases
) )
} }
} }

@ -8,29 +8,29 @@
import SwiftUI import SwiftUI
struct ToggleComponent: View { struct ToggleComponent: View {
let description: String let description: LocalizedStringKey
let booleanName : String let booleanName: String
@AppStorage private var boolean : Bool @AppStorage private var boolean: Bool
init(description: String, booleanName: String, booleanDefaultValue: Bool) { init(description: LocalizedStringKey, booleanName: String, booleanDefaultValue: Bool) {
self.description = description self.description = description
self.booleanName = booleanName self.booleanName = booleanName
_boolean = AppStorage(wrappedValue: booleanDefaultValue, booleanName) _boolean = AppStorage(wrappedValue: booleanDefaultValue, booleanName)
} }
var body: some View { var body: some View {
Divider().background(Color.gray).padding(.vertical, 1) Divider().background(Color.gray).padding(.vertical, 1)
Toggle(description, isOn: $boolean) Toggle(description, isOn: $boolean)
.toggleStyle(SwitchToggleStyle(tint: .blue)) .toggleStyle(SwitchToggleStyle(tint: .blue))
.padding(EdgeInsets(top: 0, leading: 48, bottom: 0, trailing: 48)) .padding(EdgeInsets(top: 0, leading: 48, bottom: 0, trailing: 48))
Divider().background(Color.gray).padding(.vertical, 1) Divider().background(Color.gray).padding(.vertical, 1)
} }
} }
struct ToggleComponent_Previews: PreviewProvider { struct ToggleComponent_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
VStack{ VStack {
ToggleComponent(description: "Dark mode", booleanName: "isDarkMode", booleanDefaultValue: false) ToggleComponent(description: LocalizedStringKey("Dark mode"), booleanName: "isDarkMode", booleanDefaultValue: false)
} }
} }
} }

@ -7,8 +7,19 @@
import Foundation import Foundation
enum Language: String, CaseIterable, Identifiable, Hashable { enum Language: String, CaseIterable, Identifiable {
case French = "Français" case English = "en"
case English = "English" case French = "fr"
var id: String { self.rawValue } var id: String { self.rawValue }
var localeIdentifier: String { self.rawValue }
var description: String {
switch self {
case .English:
return "English"
case .French:
return "Français"
}
}
} }

@ -8,52 +8,46 @@
import SwiftUI import SwiftUI
struct GeneralParametersMenuView: View { struct GeneralParametersMenuView: View {
@EnvironmentObject var languageSettings: LanguageSettings
@State private var selectedAIOption: AI @State private var selectedAIOption: AI
@State private var selectedLanguageOption: Language
@State private var selectedRulesOption: Rules @State private var selectedRulesOption: Rules
let ParametersTitle : String
let DarkModeDescription : String let parametersTitle = LocalizedStringKey("ParametersTitle")
let DarModeBooleanName : String let darkModeDescription = LocalizedStringKey("DarkModeDescription")
let DarkModeDefaultValue : Bool let darkModeBooleanName: String = "isDarkMode"
let LanguagePickerTitle : String let darkModeDefaultValue: Bool = false
let languagePickerTitle = LocalizedStringKey("LanguagePickerTitle")
init(parametersTitle: String,selectedAIOption: AI, selectedLanguageOption: Language, selectedRulesOption: Rules, DarkModeDescription: String, DarModeBooleanName: String, DarkModeDefaultValue: Bool, LanguagePickerTitle: String) {
self.ParametersTitle = parametersTitle init(selectedAIOption: AI, selectedRulesOption: Rules) {
self.selectedAIOption = selectedAIOption self._selectedAIOption = State(initialValue: selectedAIOption)
self.selectedLanguageOption = selectedLanguageOption self._selectedRulesOption = State(initialValue: selectedRulesOption)
self.selectedRulesOption = selectedRulesOption
self.DarkModeDescription = DarkModeDescription
self.DarModeBooleanName = DarModeBooleanName
self.DarkModeDefaultValue = DarkModeDefaultValue
self.LanguagePickerTitle = LanguagePickerTitle
} }
var body: some View { var body: some View {
VStack(alignment: .leading) { VStack(alignment: .leading) {
HStack(alignment: .center) { HStack(alignment: .center) {
Text(ParametersTitle).bold().font(.title) Text(parametersTitle).bold().font(.title)
}.frame(maxWidth: .infinity) }.frame(maxWidth: .infinity)
Spacer().frame(maxHeight: 30) Spacer().frame(maxHeight: 30)
ToggleComponent(description: "Dark mode", booleanName: "isDarkMode", booleanDefaultValue: false) ToggleComponent(description: darkModeDescription, booleanName: darkModeBooleanName, booleanDefaultValue: darkModeDefaultValue)
PickerComponent(title: "Sélectionne un langage :", PickerComponent(title: languagePickerTitle,
selectedOption: $selectedLanguageOption, selectedOption: $languageSettings.selectedLanguage,
options: Language.allCases) options: Language.allCases)
.onChange(of: languageSettings.selectedLanguage) { newLanguage in
}.frame(maxHeight: .infinity, alignment: .top) languageSettings.changeLanguage(to: newLanguage)
}
}
.frame(maxHeight: .infinity, alignment: .top)
} }
} }
struct GeneralParametersMenuView_Previews: PreviewProvider { struct GeneralParametersMenuView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
let languageSettings = LanguageSettings(selectedLanguage: .French)
GeneralParametersMenuView( GeneralParametersMenuView(
parametersTitle: "Paramètres",
selectedAIOption: .RandomAction, selectedAIOption: .RandomAction,
selectedLanguageOption: .French, selectedRulesOption: .Regular
selectedRulesOption: .Regular,
DarkModeDescription: "Dark Mode",
DarModeBooleanName: "isDarkMode",
DarkModeDefaultValue: false,
LanguagePickerTitle: "Séléctionne un langage"
) )
.environmentObject(languageSettings)
} }
} }

@ -8,11 +8,14 @@
import SwiftUI import SwiftUI
struct MainMenu: View { struct MainMenu: View {
let playButtonText : String @EnvironmentObject var languageSettings: LanguageSettings
let registeredGamesButtonText : String let playButtonText: String
let ParametersButtontText : String let registeredGamesButtonText: String
let parametersButtonText: String
@State private var action: Int? = 0 @State private var action: Int? = 0
@AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("isDarkMode") private var isDarkMode = false
@State private var reloadView = false // Déclarer reloadView ici
var body: some View { var body: some View {
ZStack { ZStack {
NavigationView { NavigationView {
@ -33,26 +36,26 @@ struct MainMenu: View {
Spacer().frame(height: 30) Spacer().frame(height: 30)
ButtonComponent(title: ParametersButtontText) ButtonComponent(title: ParametersButtontText)
{ GeneralParametersMenuView( { GeneralParametersMenuView(
parametersTitle: "Paramètres",
selectedAIOption: .RandomAction, selectedAIOption: .RandomAction,
selectedLanguageOption: .French, selectedRulesOption: .Regular
selectedRulesOption: .Regular, ).id(reloadView) // Utilisez l'ID pour forcer le rechargement de la vue
DarkModeDescription: "Dark Mode",
DarModeBooleanName: "isDarkMode",
DarkModeDefaultValue: false,
LanguagePickerTitle: "Séléctionne un langage"
) }
} }
Spacer()
} }
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32)) Spacer()
} }
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
}
.environmentObject(languageSettings)
.onReceive(NotificationCenter.default.publisher(for: NSNotification.Name("LanguageChanged"))) { _ in
self.reloadView.toggle() // Changez la valeur pour forcer le rechargement
} }
}
} }
} }
struct MainMenu_Previews: PreviewProvider { struct MainMenu_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées", parametersButtonText: "Paramètres")
.environmentObject(LanguageSettings(selectedLanguage: .French))
} }
} }

@ -0,0 +1,11 @@
/*
Localizable.strings
ArkitDoushiQi
Created by Louis DUFOUR on 28/05/2024.
*/
"ParametersTitle" = "Parameters";
"DarkModeDescription" = "Dark Mode";
"LanguagePickerTitle" = "Language";

@ -0,0 +1,11 @@
/*
Localizable.strings
ArkitDoushiQi
Created by Louis DUFOUR on 28/05/2024.
*/
"ParametersTitle" = "Paramètres";
"DarkModeDescription" = "Mode sombre";
"LanguagePickerTitle" = "Langue";
Loading…
Cancel
Save