Revert "Move game vm initialisation"

This reverts commit 263913959f.
main
Mathieu GROUSSEAU 1 week ago
parent f281794cbc
commit d5bf6d8e5e

@ -1,3 +1,10 @@
//
// IngameView.swift
// App
//
// Created by etudiant2 on 21/05/2025.
//
import SwiftUI import SwiftUI
import SpriteKit import SpriteKit
import Connect4Core import Connect4Core
@ -60,7 +67,10 @@ struct IngameView: View {
} }
} }
init(vm: IngameVM) { init(settings: NewGameVM, player1: PlayerSettingsVM, player2: PlayerSettingsVM) {
guard let vm = IngameVM(settings: settings, player1: player1, player2: player2)
else { fatalError("TODO: how to handle game setup failure") }
self._vm = StateObject(wrappedValue: vm) self._vm = StateObject(wrappedValue: vm)
self.scene = GameScene(viewModel: vm) self.scene = GameScene(viewModel: vm)
} }
@ -132,5 +142,5 @@ private struct PlayerView: View {
} }
#Preview { #Preview {
IngameView(vm: IngameVM(settings: NewGameVM(), player1: PlayerSettingsVM(type: .Human), player2: PlayerSettingsVM(type: .AISimpleNegaMax))) IngameView(settings: NewGameVM(), player1: PlayerSettingsVM(type: .Human), player2: PlayerSettingsVM(type: .AISimpleNegaMax))
} }

@ -49,11 +49,7 @@ struct NewGameView: View {
} }
}.toolbar { }.toolbar {
NavigationLink { NavigationLink {
// NavigationLazyView( NavigationLazyView(IngameView(settings: vm, player1: p1, player2: p2))
let vm = IngameVM(settings: vm, player1: p1, player2: p2)
IngameView(vm: vm)
// )
} label: { } label: {
Label("newGame.play", systemImage: "play") Label("newGame.play", systemImage: "play")
} }

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

Loading…
Cancel
Save