|
|
|
@ -2,26 +2,16 @@ import Foundation
|
|
|
|
|
import Connect4Persistance
|
|
|
|
|
|
|
|
|
|
class SavedGamesVM: ObservableObject {
|
|
|
|
|
private var loaded: Bool = false
|
|
|
|
|
|
|
|
|
|
@Published
|
|
|
|
|
var results: [ResultVM] = []
|
|
|
|
|
|
|
|
|
|
init() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func loadData() {
|
|
|
|
|
if (!loaded) {
|
|
|
|
|
loaded = true
|
|
|
|
|
Task(priority: .userInitiated) {
|
|
|
|
|
let results = (try await Persistance.loadGameResults(withName: "savedGames.json", withFolderName: "connect4.games")) ?? []
|
|
|
|
|
let vms = results.sorted(by: { $0.date > $1.date }).map(ResultVM.init)
|
|
|
|
|
|
|
|
|
|
Task(priority: .userInitiated) {
|
|
|
|
|
let results = (try await Persistance.loadGameResults(withName: "savedGames.json", withFolderName: "connect4.games")) ?? []
|
|
|
|
|
let vms = results.map(ResultVM.init)
|
|
|
|
|
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
|
self.results = vms
|
|
|
|
|
}
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
|
self.results = vms
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -31,28 +21,33 @@ class ResultVM: Identifiable {
|
|
|
|
|
var id: Date { self.date }
|
|
|
|
|
|
|
|
|
|
let date: Date
|
|
|
|
|
let player1: String
|
|
|
|
|
let player1: String?
|
|
|
|
|
let player1Type: PlayerType
|
|
|
|
|
let player2: String
|
|
|
|
|
let player2: String?
|
|
|
|
|
let player2Type: PlayerType
|
|
|
|
|
let rules: RulesType
|
|
|
|
|
|
|
|
|
|
init(from: GameResult) {
|
|
|
|
|
self.date = from.date
|
|
|
|
|
let p = from.players[0]
|
|
|
|
|
|
|
|
|
|
if p.id == .player1 {
|
|
|
|
|
self.player1 = p.name
|
|
|
|
|
self.player1Type = Self.i(data: p)
|
|
|
|
|
self.player2 = p.name
|
|
|
|
|
self.player2Type = Self.i(data: from.players[1])
|
|
|
|
|
let (p1, p2) = if from.players[0].id == .player1 {
|
|
|
|
|
(from.players[0], from.players[1])
|
|
|
|
|
} else {
|
|
|
|
|
self.player2 = p.name
|
|
|
|
|
self.player2Type = Self.i(data: p)
|
|
|
|
|
self.player1 = p.name
|
|
|
|
|
self.player1Type = Self.i(data: from.players[1])
|
|
|
|
|
(from.players[1], from.players[0])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.player1Type = Self.i(data: p1)
|
|
|
|
|
self.player1 = if p1.name.isEmpty {
|
|
|
|
|
nil
|
|
|
|
|
} else {
|
|
|
|
|
p1.name
|
|
|
|
|
}
|
|
|
|
|
self.player2Type = Self.i(data: p2)
|
|
|
|
|
self.player2 = if p2.name.isEmpty {
|
|
|
|
|
nil
|
|
|
|
|
} else {
|
|
|
|
|
p2.name
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.rules = switch (from.rules.type) {
|
|
|
|
|
case "Connect4Rules": .Classic
|
|
|
|
|
case "TicTacToeRules": .TicTacToe
|
|
|
|
|