|
|
|
@ -43,7 +43,7 @@ class IngameVM: ObservableObject {
|
|
|
|
|
|
|
|
|
|
private var running: Bool = false
|
|
|
|
|
|
|
|
|
|
init(settings: NewGameVM, player1: PlayerSettingsVM, player2: PlayerSettingsVM) {
|
|
|
|
|
init?(settings: NewGameVM, player1: PlayerSettingsVM, player2: PlayerSettingsVM) {
|
|
|
|
|
let fmt = DateFormatter()
|
|
|
|
|
fmt.locale = Locale(identifier: "EN") // No "root" locale?
|
|
|
|
|
self.gameName = fmt.string(from: Date.now)
|
|
|
|
@ -57,10 +57,10 @@ class IngameVM: ObservableObject {
|
|
|
|
|
Int(settings.height),
|
|
|
|
|
Int(settings.width),
|
|
|
|
|
Int(settings.alignedTokens)
|
|
|
|
|
) else { fatalError("rule initialisation failed") }
|
|
|
|
|
) else { return nil }
|
|
|
|
|
|
|
|
|
|
guard let player1 = Self.playerOf(settings: player1, id: .player1) else { fatalError("player initialisation failed") }
|
|
|
|
|
guard let player2 = Self.playerOf(settings: player2, id: .player2) else { fatalError("player initialisation failed") }
|
|
|
|
|
guard let player1 = Self.playerOf(settings: player1, id: .player1) else { return nil }
|
|
|
|
|
guard let player2 = Self.playerOf(settings: player2, id: .player2) else { return nil }
|
|
|
|
|
|
|
|
|
|
self.game = try! Game(withRules: rules, andPlayer1: player1, andPlayer2: player2)
|
|
|
|
|
|
|
|
|
@ -70,9 +70,11 @@ class IngameVM: ObservableObject {
|
|
|
|
|
self.currentBoard = self.game.board
|
|
|
|
|
|
|
|
|
|
game.addGameOverListener { board, result, player in
|
|
|
|
|
print("game over")
|
|
|
|
|
DispatchQueue.main.async {
|
|
|
|
|
self.currentPlayer = .noOne
|
|
|
|
|
}
|
|
|
|
|
// TODO
|
|
|
|
|
}
|
|
|
|
|
game.addGameChangedListener { game, result in
|
|
|
|
|
if game.players.contains(where: { $0.value is ReplayPlayer }) {
|
|
|
|
@ -80,7 +82,9 @@ class IngameVM: ObservableObject {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defer { print("game saved") }
|
|
|
|
|
defer {
|
|
|
|
|
print("game saved")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if result == .notFinished {
|
|
|
|
|
_ = try await Persistance.saveGame(withName: "\(self.gameName).co4", andGame: self.game, withFolderName: "connect4.games")
|
|
|
|
@ -90,6 +94,7 @@ class IngameVM: ObservableObject {
|
|
|
|
|
_ = try await Persistance.saveGameResult(withName: "savedGames.json", andGame: game, andResult: result, withFolderName: "connect4.games")
|
|
|
|
|
}
|
|
|
|
|
game.addGameStartedListener { board in
|
|
|
|
|
print("game started")
|
|
|
|
|
// TODO
|
|
|
|
|
}
|
|
|
|
|
game.addBoardChangedListener { board, lastCell in
|
|
|
|
|