diff --git a/ArkitDoushiQi/ArkitDoushiQi/Game/GameView.swift b/ArkitDoushiQi/ArkitDoushiQi/Game/GameView.swift index 999e0f5..48a53b3 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Game/GameView.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Game/GameView.swift @@ -15,39 +15,14 @@ struct GameView: View { var player2Name: String = "toto" var player2Image: UIImage - var gameScene: GameScene = GameScene(size: CGSize(width: 940, height: 740),player1Name:"TOTO",player1Image: Image("profil"),player2Name:"toto2",player2Image: Image("profil")) - - - @State var msg: String = "" + var vm:VMGame = VMGame() var body: some View { ZStack { Text(msg) SpriteView(scene: gameScene) .edgesIgnoringSafeArea(.all) - .task { - gameScene.game.addGameStartedListener { board in startGame() } - gameScene.game.addGameOverListener { board, result, player in gameOver(result : result) } - gameScene.game.addGameChangedListener { game in gameChange() } - gameScene.game.addBoardChangedListener { board in boardChange() } - - gameScene.game.addMoveChosenCallbacksListener { board, move, player in moveChose(board: board, move: move, player: player) } - gameScene.game.addInvalidMoveCallbacksListener { board, move, player, bool in invalidMove(board: board, move: move, player: player, bool: bool) } - - gameScene.game.addPieceRemovedListener { _, _, piece in removePiece(piece: piece) } - - gameScene.game.addPlayerNotifiedListener { board, player in - print("Player notif : \(player.id) à toi de jouer ") - msg = "Player notif : \(player.id) à toi de jouer !" - - if player is IAPlayer { - try! await player.chooseMove(in: board, with: gameScene.game.rules) - } - } - print("Start ?") - try! await gameScene.game.start() - print("After satrt") - } + .task { vm.start() } VStack { HStack { @@ -94,78 +69,5 @@ struct GameView: View { //self.player2Name = player2Name self.player2Image = image2 } - - // ------ Listener -------- // - - func startGame() { - print("Start game !") - msg = "Start !!" - } - - func gameOver(result : Result) { print("Game over !") - msg = "Game over ! " - switch result - { - case .winner(let winner, _): - switch winner { - case .player1: - msg = msg + "player 1 wins !" - case .player2: - msg = msg + "player 2 wins !" - default: - msg = msg + "equality !" - } - default: - msg="Game over !" - } - - gameScene.isGameOver = true - actionEndGame(scene: gameScene,message: msg) - } - - func gameChange() { - print("Game change !") - } - - func boardChange() { - print("Board change !") - gameScene.displayBoard(board: gameScene.game.board) - } - - func moveChose(board: Board, move: Move, player: Player) { - } - - func invalidMove(board: Board, move: Move, player: Player, bool: Bool) { - if bool { - print("Move valid de \(player.id)") - print("Move : \(move.description)") - } else { - print("Move invalid de \(player.id)") - print("Move : \(move.description)") - gameScene.displayBoard(board: gameScene.game.board) - } - print("------------") - } - - func removePiece(piece:Piece){ - print("Remove piece") - if let node = gameScene.pieces[piece.owner]![piece.animal] { - actionRemove(size: gameScene.size, node: node, scene: gameScene) - print("Remove piece from parent") - } - } - - // ------------------------- // -} -/* -struct GameView_Previews: PreviewProvider { - static var previews: some View { - GameView( - player1Name: "Player 1", - player1Image: UIImage(named: "profil")!, - player2Name: "Player 2", - player2Image: UIImage(named: "profil")! - ) - } } -*/ + diff --git a/ArkitDoushiQi/ArkitDoushiQi/Game/VMGame.swift b/ArkitDoushiQi/ArkitDoushiQi/Game/VMGame.swift new file mode 100644 index 0000000..3b2e7ce --- /dev/null +++ b/ArkitDoushiQi/ArkitDoushiQi/Game/VMGame.swift @@ -0,0 +1,94 @@ + + +import Foundation + +struct VMGame { + + @State var msg: String = "" + + var gameScene: GameScene = GameScene(size: CGSize(width: 940, height: 740),player1Name:"TOTO",player1Image: Image("profil"),player2Name:"toto2",player2Image: Image("profil")) + + func start(){ + defineListener() + try! await gameScene.game.start() + } + + func defineListener(){ + gameScene.game.addGameStartedListener { board in startGame() } + gameScene.game.addGameOverListener { board, result, player in gameOver(result : result) } + gameScene.game.addGameChangedListener { game in gameChange() } + gameScene.game.addBoardChangedListener { board in boardChange() } + + gameScene.game.addMoveChosenCallbacksListener { board, move, player in moveChose(board: board, move: move, player: player) } + gameScene.game.addInvalidMoveCallbacksListener { board, move, player, bool in invalidMove(board: board, move: move, player: player, bool: bool) } + + gameScene.game.addPieceRemovedListener { _, _, piece in removePiece(piece: piece) } + + gameScene.game.addPlayerNotifiedListener { board, player in + print("Player notif : \(player.id) à toi de jouer ") + msg = "Player notif : \(player.id) à toi de jouer !" + + if player is IAPlayer { + try! await player.chooseMove(in: board, with: gameScene.game.rules) + } + } + } + + func startGame() { + print("Start game !") + msg = "Start !!" + } + + func gameOver(result : Result) { print("Game over !") + msg = "Game over ! " + switch result + { + case .winner(let winner, _): + switch winner { + case .player1: + msg = msg + "player 1 wins !" + case .player2: + msg = msg + "player 2 wins !" + default: + msg = msg + "equality !" + } + default: + msg="Game over !" + } + + gameScene.isGameOver = true + actionEndGame(scene: gameScene,message: msg) + } + + func gameChange() { + print("Game change !") + } + + func boardChange() { + print("Board change !") + gameScene.displayBoard(board: gameScene.game.board) + } + + func moveChose(board: Board, move: Move, player: Player) { + } + + func invalidMove(board: Board, move: Move, player: Player, bool: Bool) { + if bool { + print("Move valid de \(player.id)") + print("Move : \(move.description)") + } else { + print("Move invalid de \(player.id)") + print("Move : \(move.description)") + gameScene.displayBoard(board: gameScene.game.board) + } + print("------------") + } + + func removePiece(piece:Piece){ + print("Remove piece") + if let node = gameScene.pieces[piece.owner]![piece.animal] { + actionRemove(size: gameScene.size, node: node, scene: gameScene) + print("Remove piece from parent") + } + } +} \ No newline at end of file