parent
6210af2f99
commit
13e6d1115a
@ -0,0 +1,73 @@
|
||||
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.map(ResultVM.init)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.results = vms
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ResultVM: Identifiable {
|
||||
var id: Date { self.date }
|
||||
|
||||
let date: Date
|
||||
let player1: String
|
||||
let player1Type: PlayerType
|
||||
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])
|
||||
} else {
|
||||
self.player2 = p.name
|
||||
self.player2Type = Self.i(data: p)
|
||||
self.player1 = p.name
|
||||
self.player1Type = Self.i(data: from.players[1])
|
||||
}
|
||||
|
||||
self.rules = switch (from.rules.type) {
|
||||
case "Connect4Rules": .Classic
|
||||
case "TicTacToeRules": .TicTacToe
|
||||
case "PopOutRules": .PopOut
|
||||
default: fatalError("Unexpected rules type")
|
||||
}
|
||||
}
|
||||
|
||||
private static func i(data: PlayerData) -> PlayerType {
|
||||
return switch (data.type) {
|
||||
case "HumanPlayer": .Human
|
||||
case "RandomPlayer": .AIRandom
|
||||
case "FinnishHimPlayer": .AIFinnishHim
|
||||
case "SimpleNegaMaxPlayer": .AISimpleNegaMax
|
||||
default: fatalError("Unexpected player type")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue