Merge branch 'dev_vm_Players'

dev_save_game
Nathan VERDIER 11 months ago
commit a492de1e8e

@ -57,6 +57,9 @@
EC62C5292C1974000048CD0B /* PlayersVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C5282C1974000048CD0B /* PlayersVM.swift */; };
EC62C52D2C197ED10048CD0B /* Player.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C52C2C197ED10048CD0B /* Player.swift */; };
EC62C5332C1C188F0048CD0B /* DSQ.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC62C5322C1C188F0048CD0B /* DSQ.xcframework */; };
EC62C5382C1C64EE0048CD0B /* CoreManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C5372C1C64EE0048CD0B /* CoreManager.swift */; };
EC62C53D2C1C69200048CD0B /* DouShouQi_App.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = EC62C53B2C1C69200048CD0B /* DouShouQi_App.xcdatamodeld */; };
EC62C53F2C1C6D1A0048CD0B /* CDPlayerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C53E2C1C6D1A0048CD0B /* CDPlayerExtension.swift */; };
EC99D5C12C089F6B00731B62 /* GameResumeFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC99D5C02C089F6B00731B62 /* GameResumeFrame.swift */; };
ECB6364E2C04628E007CD5E2 /* SpriteMeeple.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB6364D2C04628E007CD5E2 /* SpriteMeeple.swift */; };
ECB636512C046379007CD5E2 /* MusicPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB636502C046379007CD5E2 /* MusicPlayer.swift */; };
@ -136,6 +139,9 @@
EC62C5282C1974000048CD0B /* PlayersVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayersVM.swift; sourceTree = "<group>"; };
EC62C52C2C197ED10048CD0B /* Player.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Player.swift; sourceTree = "<group>"; };
EC62C5322C1C188F0048CD0B /* DSQ.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = DSQ.xcframework; path = ../../SwiftUI_ARKit_2024/XCFramework/DSQ.xcframework; sourceTree = "<group>"; };
EC62C5372C1C64EE0048CD0B /* CoreManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreManager.swift; sourceTree = "<group>"; };
EC62C53C2C1C69200048CD0B /* DouShouQi_App.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = DouShouQi_App.xcdatamodel; sourceTree = "<group>"; };
EC62C53E2C1C6D1A0048CD0B /* CDPlayerExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDPlayerExtension.swift; sourceTree = "<group>"; };
EC99D5C02C089F6B00731B62 /* GameResumeFrame.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameResumeFrame.swift; sourceTree = "<group>"; };
ECB6364D2C04628E007CD5E2 /* SpriteMeeple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMeeple.swift; sourceTree = "<group>"; };
ECB636502C046379007CD5E2 /* MusicPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicPlayer.swift; sourceTree = "<group>"; };
@ -206,6 +212,7 @@
6458345B2BF5F92300E18321 /* DouShouQi_AppApp.swift */,
6458345D2BF5F92300E18321 /* ContentView.swift */,
6458345F2BF5F92500E18321 /* Assets.xcassets */,
EC62C53B2C1C69200048CD0B /* DouShouQi_App.xcdatamodeld */,
645834612BF5F92500E18321 /* Preview Content */,
);
path = DouShouQi_App;
@ -421,6 +428,7 @@
EC62C5232C0F68730048CD0B /* Extensions */ = {
isa = PBXGroup;
children = (
EC62C53E2C1C6D1A0048CD0B /* CDPlayerExtension.swift */,
);
path = Extensions;
sourceTree = "<group>";
@ -433,10 +441,12 @@
);
path = Players;
sourceTree = "<group>";
tabWidth = 4;
};
EC62C52B2C197EA80048CD0B /* Class */ = {
isa = PBXGroup;
children = (
ECE7770E2C1C6FB200D354B0 /* CoreData */,
EC62C52C2C197ED10048CD0B /* Player.swift */,
);
path = Class;
@ -451,6 +461,14 @@
path = SoundPlayerClass;
sourceTree = "<group>";
};
ECE7770E2C1C6FB200D354B0 /* CoreData */ = {
isa = PBXGroup;
children = (
EC62C5372C1C64EE0048CD0B /* CoreManager.swift */,
);
path = CoreData;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -606,13 +624,16 @@
649B59A42BF64574002BAE38 /* TitlePageFrame.swift in Sources */,
EC0540C42C08A13E0032E9EF /* GameView.swift in Sources */,
EC05BFC42C04C3C4000F7B19 /* SettingsView.swift in Sources */,
EC62C53D2C1C69200048CD0B /* DouShouQi_App.xcdatamodeld in Sources */,
EC62C50F2C05D06A0048CD0B /* AddPlayerView.swift in Sources */,
EC62C53F2C1C6D1A0048CD0B /* CDPlayerExtension.swift in Sources */,
64FC4D6B2C09C7C900D08B8B /* SelectPlayerButtonView.swift in Sources */,
646F04C12C0F5C11003C8600 /* Language.swift in Sources */,
EC05BFC82C04D832000F7B19 /* CustomSwitchButton.swift in Sources */,
64D992722C06281B002ACBC6 /* SystemIcons.swift in Sources */,
645B4C252BFCD3C600FD658A /* ScoreBoardView.swift in Sources */,
649ABF602BF60F2D002E8894 /* MainMenuButton.swift in Sources */,
EC62C5382C1C64EE0048CD0B /* CoreManager.swift in Sources */,
EC62C5252C0F68830048CD0B /* PlayerVM.swift in Sources */,
EC62C51B2C09D1790048CD0B /* PlayerStatView.swift in Sources */,
649B59B22BF65392002BAE38 /* TextStyles.swift in Sources */,
@ -951,6 +972,19 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCVersionGroup section */
EC62C53B2C1C69200048CD0B /* DouShouQi_App.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
EC62C53C2C1C69200048CD0B /* DouShouQi_App.xcdatamodel */,
);
currentVersion = EC62C53C2C1C69200048CD0B /* DouShouQi_App.xcdatamodel */;
path = DouShouQi_App.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};
/* End XCVersionGroup section */
};
rootObject = 645834502BF5F92300E18321 /* Project object */;
}

@ -0,0 +1,58 @@
//
// CoreManger.swift
// DouShouQi_App
//
// Created by étudiant on 14/06/2024.
//
import Foundation
import CoreData
import DouShouQiModel
import Combine
class CoreDataManager {
static let shared = CoreDataManager()
private init() {}
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "DouShouQi_App") // Remplacez par le nom de votre modèle
container.loadPersistentStores { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
}
return container
}()
var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
func saveContext() {
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
func savePlayer(playerVM: PlayerVM) {
let player = CDPlayer(context: context)
player.name = playerVM.player.name
player.photo = playerVM.player.photo
saveContext()
}
func fetchPlayers() -> [CDPlayer] {
let fetchRequest: NSFetchRequest<CDPlayer> = CDPlayer.fetchRequest()
do {
return try context.fetch(fetchRequest)
} catch {
print("Failed to fetch players: \(error)")
return []
}
}
}

@ -0,0 +1,22 @@
//
// CDPlayerExtension.swift
// DouShouQi_App
//
// Created by étudiant on 14/06/2024.
//
import Foundation
import CoreData
extension CDPlayer {
func toModel() -> Player {
return Player(name: self.name ?? "", photo: self.photo ?? "")
}
convenience init(name: String, photo: String, context: NSManagedObjectContext){
self.init(context: context)
self.name = name
self.photo = photo
}
}

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="21754" systemVersion="22G91" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
<entity name="CDPlayer" representedClassName="CDPlayer" syncable="YES" codeGenerationType="class">
<attribute name="name" optional="YES" attributeType="String"/>
<attribute name="photo" optional="YES" attributeType="String"/>
</entity>
</model>

@ -8,7 +8,7 @@
import SwiftUI
@main
@main
struct DouShouQi_AppApp: App {
// Create an instance of SettingsVM
@StateObject private var settingsVM = SettingsVM()

@ -7,6 +7,8 @@
import Foundation
import DouShouQiModel
import CoreData
import Combine
public class PlayersVM: ObservableObject{
@ -15,24 +17,31 @@ public class PlayersVM: ObservableObject{
public func SavePlayer(player: PlayerVM){
players.append(player)
CoreDataManager.shared.savePlayer(playerVM: player)
}
public func contains(where predicate: (PlayerVM) -> Bool) -> Bool {
return players.contains(where: predicate)
}
return players.contains(where: predicate)
}
//public func getAllPlayer(): [PlayerVM]{}
public func getAllPlayer() -> [PlayerVM]{
let coreDataPlayers = CoreDataManager.shared.fetchPlayers()
self.players = coreDataPlayers.map { PlayerVM(player: $0.toModel()) }
return players
}
init() {
init() {
players = []
let player = PlayerVM(player: Player(name: "Rayhan", photo: ""))
players = getAllPlayer()
/* let player = PlayerVM(player: Player(name: "Rayhan", photo: ""))
players.append(player)
let player2 = PlayerVM(player: Player(name: "Nathan", photo: ""))
players.append(player2)
let player3 = PlayerVM(player: Player(name: "ayoub", photo: ""))
players.append(player3)
let player2 = PlayerVM(player: Player(name: "Nathan", photo: ""))
players.append(player2)
let player3 = PlayerVM(player: Player(name: "ayoub", photo: ""))
players.append(player3) */
}
}

@ -36,7 +36,7 @@ struct PlayersView: View {
SearchBar(text: $searchText)
.padding(.horizontal)
List {
ForEach(groupedPlayers.keys.sorted(), id: \.self) { key in
Section(header: Text(key)) {

Loading…
Cancel
Save