diff --git a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift index 2ceeb01..5a27ede 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift @@ -12,16 +12,14 @@ import SwiftUI class GameScene : SKScene{ - @ObservedObject var gameVm : GameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, - andPlayer2: Player(withName: "Kumogi", andId: .player2)!) - + @ObservedObject var gameVm : GameVM let imgBoard : SKSpriteNode = SKSpriteNode(imageNamed: "BoardImg") let defaultSize : CGSize = CGSize(width: 120, height: 120) - var game : Game = try! Game(withRules: ClassicRules(), - andPlayer1: Player(withName: "Meruemu", andId: .player1)!, - andPlayer2: Player(withName: "Kumogi", andId: .player2)!) +// var game : Game = try! Game(withRules: ClassicRules(), +// andPlayer1: Player(withName: "Meruemu", andId: .player1)!, +// andPlayer2: Player(withName: "Kumogi", andId: .player2)!) // let pieces : [ Owner : [Animal : SpriteMeeple]] = // [ @@ -48,11 +46,11 @@ class GameScene : SKScene{ // ] // ] - override init(size s: CGSize){ + init(size s: CGSize, andVM gameVM : GameVM){ + self.gameVm = gameVM super.init(size: s) self.addChild(imgBoard) - - self.displayBoard(game.board) + self.displayBoard(gameVm.game.board) self.scaleMode = .aspectFit self.anchorPoint = CGPoint(x: 0.5, y:0.5) @@ -71,6 +69,9 @@ class GameScene : SKScene{ } required init?(coder aDecoder: NSCoder) { + self.gameVm = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, + andPlayer2: Player(withName: "Kumogi", andId: .player2)!) + super.init(coder: aDecoder) fatalError("init(coder:) has not been implemented") } diff --git a/DouShouQiIOS/DouShouQiIOS/Class/GameVM.swift b/DouShouQiIOS/DouShouQiIOS/Class/GameVM.swift index 8422217..5185ed8 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/GameVM.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/GameVM.swift @@ -16,6 +16,7 @@ import SwiftUI class GameVM : ObservableObject, Identifiable { + ///Players let player1 : Player let player2 : Player @@ -29,6 +30,8 @@ class GameVM : ObservableObject, Identifiable { //Message @Published var displayMessage : String = "" + var game : Game + public init(withRules rules : Rules = ClassicRules(), andPlayer1 p1: Player, andPlayer2 p2 : Player?) { self.player1 = p1 @@ -40,6 +43,10 @@ class GameVM : ObservableObject, Identifiable { } self.actualRules = rules + + self.game = try! Game(withRules: actualRules, andPlayer1: player1, andPlayer2: player2) + + //TODO recup les pieces de la game ? self.pieces = [ .player1 : [ .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), @@ -85,6 +92,8 @@ class GameVM : ObservableObject, Identifiable { destRow = readInt(withMessage: "\(player.name) please enter the destination row in which you want to move your piece)") destCol = readInt(withMessage: "\(player.name) please enter the destination column in which you want to move your piece)") + self.pieces[player.id][Animal.cat]? + return Move(of: player.id, fromRow: originRow!, andFromColumn: originCol!, toRow: destRow!, andToColumn: destCol!) } @@ -97,8 +106,6 @@ class GameVM : ObservableObject, Identifiable { // return 1 // } - var game: Game = try Game(withRules: actualRules, andPlayer1: player1, andPlayer2: player2) - for player in game.players { if player.value is HumanPlayer { let hp = player.value as! HumanPlayer @@ -118,10 +125,10 @@ class GameVM : ObservableObject, Identifiable { _ = readLine() if player is HumanPlayer { - var move = self.readMove(from: player as! HumanPlayer) + let move = self.readMove(from: player as! HumanPlayer) try! await (player as! HumanPlayer).chooseMove(move) } else { - _ = try! await player.chooseMove(in: board, with: game.rules) + _ = try! await player.chooseMove(in: board, with: self.game.rules) } }) diff --git a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift index 214f559..969baf0 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift @@ -7,6 +7,7 @@ import SwiftUI import SpriteKit +import DouShouQiModel struct GameView: View { @@ -14,24 +15,35 @@ struct GameView: View { @State private var turnNumber = 1 @State private var gameTime = 0.0 // Temps en secondes - @State private var statusMessage = "C'est votre tour" + //@State private var statusMessage = "C'est votre tour !" @State private var player1Pieces = 8 @State private var player2Pieces = 8 + + // On donne les deux player à la vue ? var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() let gridItems = Array(repeating: GridItem(.flexible()), count: 8) + ///VM + var gameVM : GameVM + ///SK - var gs : GameScene = GameScene(size: CGSizeMake(940,740)) + var gs : GameScene + init (){ + self.gameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, andPlayer2: Player(withName: "Kumogi", andId: .player2)!) + + self.gs = GameScene(size: CGSizeMake(940,740), andVM: gameVM) + } + var body: some View { ZStack{ Rectangle().fill(Color.bgColor).edgesIgnoringSafeArea(.all) VStack { VStack { - Text(statusMessage) + Text(gameVM.displayMessage) .font(.title) .padding(.top, 20) diff --git a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift index af34be6..ec54b56 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift @@ -10,12 +10,12 @@ import SpriteKit struct SpriteKitView: View { ///Sprite Kit - var gs : GameScene = GameScene(size: CGSizeMake(940,740)) + //var gs : GameScene = GameScene(size: CGSizeMake(940,740)) var body: some View { VStack{ - SpriteView(scene: gs) + //SpriteView(scene: gs) } } }