diff --git a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift index f630146..a0247fa 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift @@ -10,53 +10,56 @@ import DouShouQiModel import SpriteKit import SwiftUI + +// Class GameScene +// This class is used to display the game board and the pieces on it class GameScene : SKScene{ - // @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)!) - - let pieces : [ Owner : [Animal : SpriteMeeple]] = - [ - .player1 : [ - .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - .elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), - ], + // Define constants + let meepleSizeWidth: CGFloat = 120 + let meepleSizeHeight: CGFloat = 120 - .player2: [ - .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), - .elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player2), + // Players pieces + let pieces: [Owner: [Animal: SpriteMeeple]] = + [ + .player1: [ + .rat: SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .cat: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .dog: SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .wolf: SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .leopard: SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .tiger: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .lion: SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + .elephant: SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1), + ], + + .player2: [ + .rat: SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .cat: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .dog: SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .wolf: SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .leopard: SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .tiger: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .lion: SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + .elephant: SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2), + ] ] - ] - override init(size s: CGSize){ //, andVM gameVM : GameVM - //self.gameVm = gameVM + override init(size s: CGSize){ super.init(size: s) self.addChild(imgBoard) - //self.displayBoard(gameVm.game.board) - self.scaleMode = .aspectFit self.anchorPoint = CGPoint(x: 0.5, y:0.5) } + /** + * Display the board + * @param board : DouShouQiModel.Board - The board to display + */ func displayBoard(_ board : DouShouQiModel.Board){ //Nettoyage des fils @@ -67,7 +70,7 @@ class GameScene : SKScene{ for col in 0.. todelete) -// let player1 : Player -// let player2 : Player -// var pieces : [ Owner : [Animal : SpriteMeeple]] -// let actualRules : Rules - ///Error @Published var hasError : Bool = false ///Message @Published var displayMessage : String = "" - //On donne directement la scene et la game à la vm public init(withGame _game : Game, andScene _gameScene : GameScene) { self.game = _game @@ -52,23 +43,22 @@ class GameVM : ObservableObject, Identifiable { self.subscribesToMeeple() + ///Lancement du jeu Task{ try! await self.game.start() } } - + /// Début du jeu func onGameStart(board : Board){ - displayMessage = " ==>> 🎉 GAME STARTS! 🎉 <<== " + displayMessage = "==>> 🎉 GAME STARTS! 🎉 <<==" self.gameScene.displayBoard(board) - print("GAME STARTS") } + /// Notification du joueur func onPlayerNotified(board : Board, player : Player) async{ - print("PLAYER NOTIFIED") if player is HumanPlayer { displayMessage = "Player \(player.id == .player1 ? "🟡 1" : "🔴 2") - \(player.name), it's your turn!" - //try! await (player as! HumanPlayer).chooseMove(move) } else { do{ @@ -80,6 +70,7 @@ class GameVM : ObservableObject, Identifiable { } } + /// Mouvement choisi func onMoveChosen(board : Board, move : Move, player : Player){ ///Récupération du Meeple : let movedPiece = board.grid[move.rowOrigin][move.columnOrigin] @@ -98,16 +89,16 @@ class GameVM : ObservableObject, Identifiable { if result { ///* invalidité terminante if let piece = board.grid[move.rowDestination][move.columnDestination].piece{ - // Delete le meeple let meeples = gameScene.pieces[player.id == .player1 ? .player2 : .player1] let meeple = meeples?.first(where: { $0.key == piece.animal }) meeple?.value.parent?.removeChildren(in: [meeple!.value]) - } return } + + ///* invalidité non terminante let piece = board.grid[move.rowOrigin][move.columnOrigin] let meeples = gameScene.pieces[move.owner] let meeple = meeples?.first(where: { @@ -115,45 +106,21 @@ class GameVM : ObservableObject, Identifiable { }) meeple?.value.cellPosition = CGPoint(x: move.rowOrigin, y: move.columnOrigin); - - print("INVALID") } - - func invalideMoveChosen(board: Board, move: Move, player: Player, result: Bool) { - if result { - if let piece = board.grid[move.rowDestination][move.columnDestination].piece{ - // Delete le meeple - let meeples = gameScene.pieces[player.id == .player1 ? .player2 : .player1] - let meeple = meeples?.first(where: { - $0.key == piece.animal - }) - meeple?.value.parent?.removeChildren(in: [meeple!.value]) - - } - return - } - let piece = board.grid[move.rowOrigin][move.columnOrigin] - let meeples = gameScene.pieces[move.owner] - let meeple = meeples?.first(where: { - $0.key == piece.piece?.animal - }) - - meeple?.value.cellPosition = CGPoint(x: move.rowOrigin, y: move.columnOrigin); - } - + ///Changement de plateau func onBoardChanged(board : Board){ /// Bruit d'un placement de pion ? } + ///Fin du jeu func onGameOver(board : Board, result : Result, winner : Player?){ displayMessage = "Game Over!!!" isGameOver = true ///Gestion par l'appelant } - - ///Meeples - + ///*Meeples + ///Abonnement aux mouvements des Meeples func subscribesToMeeple(){ for meeple in gameScene.pieces[.player1]!{ meeple.value.observers.append(meepleMoved) @@ -163,13 +130,13 @@ class GameVM : ObservableObject, Identifiable { } } + ///*Mouvement d'un Meeple func meepleMoved(spriteMeeple: SpriteMeeple, startX: Int, startY: Int, endX: Int, endY: Int) async{ let owner : Owner = game.board.grid[startX][startY].piece!.owner let otherPlayer : Owner = self.game.rules.getNextPlayer() let move: Move = Move(of: owner, fromRow: startX, andFromColumn: startY, toRow: endX, andToColumn: endY) if(otherPlayer != owner){ ///Mauvais Joueur pour ce jeton - print("invalide de la part de meepleMoved") onInvalidMove(board: game.board, move: move, player: game.players[otherPlayer]!, result: false) return } @@ -177,12 +144,10 @@ class GameVM : ObservableObject, Identifiable { if let player: HumanPlayer = game.players[owner] as? HumanPlayer{ try! await player.chooseMove(move) } -// else { ///IMPOSSIBLE DE CAST LE JOUEUR HUMAIN +// else { ///! IMPOSSIBLE DE CAST LE JOUEUR HUMAIN ==> SIGABRT // let player: HumanPlayer = game.players[.player1] as! HumanPlayer // try! await player.chooseMove(move) // } - - print("il a bougé") } } diff --git a/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift b/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift index fbb0b5c..97542d2 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift @@ -7,6 +7,8 @@ import SwiftUI +/// ImagePicker +/// Classe récupéré d'internet pour permettre de choisir une image dans la galerie struct ImagePicker: UIViewControllerRepresentable { @Environment(\.presentationMode) private var presentationMode var sourceType: UIImagePickerController.SourceType = .photoLibrary diff --git a/DouShouQiIOS/DouShouQiIOS/Class/Player.swift b/DouShouQiIOS/DouShouQiIOS/Class/Player.swift index 62a2f6a..ffbf86e 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/Player.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/Player.swift @@ -7,6 +7,7 @@ import Foundation +///! Ancienne classe, supprimée suite à la mise en place de la librairie DouShouQiModel /// Représente un joueur /* diff --git a/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift b/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift index 3e534d9..f069ecc 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift @@ -8,6 +8,8 @@ import Foundation import DouShouQiModel +/// PlayerVM +/// Cette classe est utilisée pour gérer la logique du joueur class PlayerVM : ObservableObject, Identifiable { @Published var player : Player @Published var data : Player.Data @@ -19,11 +21,13 @@ class PlayerVM : ObservableObject, Identifiable { self.isEditing = false } + /// Début de l'édition func onEditing(){ self.data = player.data self.isEditing = true } + /// Fin de l'édition func onEdited(isCanceled cancel : Bool = false){ if !cancel { //save diff --git a/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift b/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift index 899b034..b6906a1 100644 --- a/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift +++ b/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift @@ -9,7 +9,11 @@ import Foundation import SpriteKit import SwiftUI +/// SpriteMeeple +/// Cette classe est utilisée pour gérer les pièces des joueurs class SpriteMeeple : SKNode, ObservableObject{ + + let imageNode : SKSpriteNode let ellipseNode : SKShapeNode @@ -37,7 +41,6 @@ class SpriteMeeple : SKNode, ObservableObject{ ellipseNode = SKShapeNode(ellipseOf: CGSize(width: 100, height: 100)) ellipseNode.fillColor = UIColor(meepleColor); - self.cellPosition = CGPoint(x: 0, y: 0) @@ -54,46 +57,58 @@ class SpriteMeeple : SKNode, ObservableObject{ get {true} } + ///TouchesBegan + /// Cette fonction est appelée lorsque l'utilisateur commence à toucher l'écran override func touchesMoved(_ touches: Set, with event: UIEvent?) { self.position = touches.first?.location(in: parent!) ?? CGPoint(x: 0, y: 0) } + ///TouchesEnded + /// Cette fonction est appelée lorsque l'utilisateur a terminé de toucher l'écran override func touchesEnded(_ touches: Set, with event: UIEvent?) { - + + //* Contantes + ///Limites du board + static let rightLimit: CGFloat = 400 + static let leftLimit: CGFloat = -400 + static let topLimit: CGFloat = 300 + static let bottomLimit: CGFloat = -300 + static let gridSize: CGFloat = 100 + /// Bordures du board ///Right - if (self.position.x < -400){ - self.position.x = -400; + if (self.position.x < leftLimit){ + self.position.x = leftLimit; } ///Left - if (self.position.x > 400){ - self.position.x = 400; + if (self.position.x > rightLimit){ + self.position.x = rightLimit; } ///Bottom - if (self.position.y < -300){ - self.position.y = -300; + if (self.position.y < bottomLimit){ + self.position.y = bottomLimit; } ///Top - if (self.position.y > 300){ - self.position.y = 300; + if (self.position.y > topLimit){ + self.position.y = topLimit; } - if (!Int(self.position.x).isMultiple(of: 100)){ - let calcx = self.position.x/100.0; - self.position.x = (calcx.rounded(.toNearestOrAwayFromZero))*100; + if (!Int(self.position.x).isMultiple(of: gridSize)){ + let calcx = self.position.x/gridSize; + self.position.x = (calcx.rounded(.toNearestOrAwayFromZero))*gridSize; } - if (!Int(self.position.y).isMultiple(of: 100)){ - let calcy = self.position.y/100.0; - self.position.y = (calcy.rounded(.toNearestOrAwayFromZero))*100; + if (!Int(self.position.y).isMultiple(of: gridSize)){ + let calcy = self.position.y/gridSize; + self.position.y = (calcy.rounded(.toNearestOrAwayFromZero))*gridSize; } - ///Envoi au observers d'une notif + ///Envoi aux observers d'une notif - ///* Exectution des Observeurs + ///* Execution des Observeurs Task { for observer in observers { await observer(self, Int(cellPosition.x), Int(cellPosition.y), Int(position.x), Int(position.y)) diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift index ddc0bb9..f8bb523 100644 --- a/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift +++ b/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift @@ -7,6 +7,8 @@ import SwiftUI +/// ClassicTextDisplay +/// Affichage classique d'un texte récurrent struct ClassicTextDisplay: View { let text : String diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift index 481df04..5d9185f 100644 --- a/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift +++ b/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift @@ -7,6 +7,7 @@ import SwiftUI +/// Affichage d'une texte en deux parties struct DoubleTextDisplay: View { let textL : String let textR : String diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift index 13fb5ff..1c7c59f 100644 --- a/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift +++ b/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift @@ -7,6 +7,7 @@ import SwiftUI +/// Bouton de navigation récurrent struct NavButton: View { let text : String diff --git a/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift b/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift index e884c78..90811a8 100644 --- a/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift +++ b/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift @@ -8,6 +8,8 @@ import Foundation import SwiftUI +/// Extension de la classe Color pour ajouter des couleurs personnalisées +//! classe DEPRECATED : utilisée avant la mise en place des thèmes via XCode public extension Color { init(hex: String) { let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted) diff --git a/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift b/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift index d6c2523..8d4d56a 100644 --- a/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift +++ b/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift @@ -8,6 +8,8 @@ import Foundation import DouShouQiModel +/// Extension de Player +//! DEPRECIATED : Créé pour la modification de la classe Player, abandonné car nécéssite l'abandon de la librairie DouShouQiModel extension Player { //var age : Int{get{return 0} set{age = newValue}} diff --git a/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift b/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift index 44a3d3c..57a5a73 100644 --- a/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift +++ b/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift @@ -8,6 +8,8 @@ import Foundation import SwiftUI +/// FullButtonStyle +/// Utilisé pour définir le style d'un bouton struct FullButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label diff --git a/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift b/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift index 3bd77e2..a4daf44 100644 --- a/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift +++ b/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift @@ -8,8 +8,10 @@ import Foundation import DouShouQiModel +// Liste de joueurs fictifs afin de tester l'application. struct StubbedPlayers{ + //(Joueurs populaires de Gun-gi)// let meruem : PlayerVM = PlayerVM(with: Player(withName: "Meruemu", andId: .player1)!) let kumogi : PlayerVM = PlayerVM(with: Player(withName: "Kumogi", andId: .player2)!) diff --git a/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift b/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift index 88e947e..2ce27bc 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift @@ -8,6 +8,8 @@ import SwiftUI import DouShouQiModel +/// EditModalView +/// Cette vue modale est utilisée pour éditer un joueur struct EditModalView: View { var playerVM : PlayerVM diff --git a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift index 6073646..5efbe7b 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift @@ -9,13 +9,15 @@ import SwiftUI import SpriteKit import DouShouQiModel +/// Vue principale du jeu struct GameView: View { @Environment(\.colorScheme) var colorScheme @State private var turnNumber = 1 @State private var gameTime = 0.0 // Temps en secondes - //@State private var statusMessage = "C'est votre tour !" + + //Nombre de pièces des joueurs @State private var player1Pieces = 8 @State private var player2Pieces = 8 @@ -25,20 +27,10 @@ struct GameView: View { ///VM var gameVM : GameVM - - ///SK - //var gs : GameScene init (gameVM : GameVM){ - //self.gameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, andPlayer2: Player(withName: "Kumogi", andId: .player2)!) self.gameVM = gameVM - // self.gs = GameScene(size: CGSizeMake(940,740), andVM: gameVM) - //self.gs = GameScene(size: CGSizeMake(940,740)) - - - - } var body: some View { @@ -61,25 +53,7 @@ struct GameView: View { } .padding([.leading, .trailing], 20) } - - /* - - ///Old Grid Support - - LazyVGrid(columns: gridItems, spacing: 5) { - ForEach(0..<64) { index in - Rectangle() - .foregroundColor((index / 8 + index % 8) % 2 == 0 ? .orange : .gray.opacity(0.2)) - .frame(height: 35) - .cornerRadius(10) - } - } - .padding(10) - .background(Color.yellow) - .cornerRadius(15) - .padding(20) - - */ + SpriteView(scene: gameVM.gameScene) .frame(width: 350, height: 275) .padding(10) diff --git a/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift b/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift index 64dd38e..2f0c987 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift @@ -7,7 +7,7 @@ import SwiftUI - +/// Vue de l'historique d'un joueur struct HistoryView: View { var playerName: String var matches: [Match] // Modèle des parties du joueur @@ -68,7 +68,6 @@ struct Match: Identifiable { var opponent: String var selfScore: Int var opScore: Int - //var result: String } struct HistoryView_Previews: PreviewProvider { diff --git a/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift b/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift index b005511..7636d7d 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift @@ -8,14 +8,14 @@ import SwiftUI import DouShouQiModel - +/// Vue principale de l'application struct MainMenuView: View { @Environment(\.colorScheme) var colorScheme var gamevm : GameVM = GameVM(withGame: try! Game(withRules: ClassicRules(), andPlayer1: Player(withName: "Meruemu", andId: .player1)!, andPlayer2: Player(withName: "Kumogi", andId: .player2)!), - andScene: GameScene(size: CGSize(width: 940, height: 740))) + andScene: GameScene(size: CGSize(width: 940, height: 740))) var body: some View { diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift index 3201609..d3cc5b0 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift @@ -8,16 +8,14 @@ import SwiftUI import DouShouQiModel +/// Liste des joueurs struct PlayerListView: View { var playerStub : StubbedPlayers = StubbedPlayers() + var body: some View { - //NavigationStack { ZStack { Rectangle().fill(Color.bgColor).ignoresSafeArea() VStack { - /*Text("Classement des joueurs") - .scaleEffect(1.75)*/ - List(playerStub.getStubbedPlayer()) { player in NavigationLink { PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [ @@ -25,7 +23,7 @@ struct PlayerListView: View { Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3), Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2) ], - playerVm: player) //mettre player plus tard + playerVm: player) } label:{Text("pif")} }.navigationDestination(for: String.self) { name in PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [ @@ -33,37 +31,10 @@ struct PlayerListView: View { Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3), Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2) ], - playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!)) //mettre player plus tard + playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!)) } .navigationTitle("Leaderboard") - - - - List { - NavigationLink{ - PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [ - Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2), - Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3), - Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2) - ], - playerVm: PlayerVM(with: Player(withName: "Billy", andId: .player2)!)) //mettre player plus tard - - } label:{Text("pif")} - - NavigationLink("Billy", value: "Billyname") - NavigationLink("Bob", value: "Bob") - NavigationLink("Bromingo", value: "Bromingo") - } - .navigationDestination(for: String.self) { name in - PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [ - Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2), - Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3), - Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2) - ], - playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!)) //mettre player plus tard - } - .navigationTitle("Leaderboard") } VStack { diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift index e539dd2..3c1c4ff 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift @@ -7,6 +7,8 @@ import SwiftUI +/// PlayerSelect +/// Cette vue est utilisée pour sélectionner un joueur struct PlayerSelect: View { @State private var image = UIImage() @State private var showSheet = false @@ -19,6 +21,26 @@ struct PlayerSelect: View { VStack { VStack{ Text("Joueur 1") + + HStack { + Image(uiImage: self.image) + .resizable() + .cornerRadius(50) + .frame(width: 100, height: 100) + .background(Color.black.opacity(0.2)) + .aspectRatio(contentMode: .fill) + .clipShape(Circle()) + + ClassicTextDisplay(text: "Change photo") + .onTapGesture { + showSheet = true + } + } + .padding(.horizontal, 20) + .sheet(isPresented: $showSheet) { + ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image) + } + TextField("Entrez un nom ici",text: .constant("")) }.foregroundStyle(.primary) .padding(20) @@ -49,11 +71,7 @@ struct PlayerSelect: View { } .padding(.horizontal, 20) .sheet(isPresented: $showSheet) { - // Pick an image from the photo library: ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image) - - // If you wish to take a photo from camera instead: - // ImagePicker(sourceType: .camera, selectedImage: self.$image) } TextField("Entrez un nom ici",text: .constant("")) diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift index a2c4043..ad30657 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift @@ -8,10 +8,8 @@ import SwiftUI import DouShouQiModel - +/// Affiche les statistiques d'un joueur struct PlayerView: View { - //var Player : Player; - //var name : String var age: Int var winLossRatio: Double var gamesPlayed: Int @@ -21,11 +19,8 @@ struct PlayerView: View { @State var isEdited : Bool = false @ObservedObject var playerVm : PlayerVM //TODO - //@Published var data : Data var body: some View { - //ZStack{ - //Rectangle().fill(Color.bgColor).ignoresSafeArea() VStack{ VStack{ Image("Blob") @@ -98,21 +93,17 @@ struct PlayerView: View { .padding(.top, 20) } .toolbar { - //ToolbarItemGroup(placement: .bottomBar) { Button(action: {isEdited.toggle()}, label: {Text("Edit")}) - //} } .sheet(isPresented: $isEdited, content: { EditModalView(playerVM: playerVm, isEdited: $isEdited) }) - //}//Zstack } } struct PlayerView_Previews: PreviewProvider { static var previews: some View { - /*var player1 = new Player(Player(withName: "Meruemu", andSName: "Roi", andId: 2, andAge: 1)*/ let stubedMatches = [ Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2), Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3), diff --git a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift index ec54b56..894caf2 100644 --- a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift +++ b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift @@ -8,14 +8,11 @@ import SwiftUI import SpriteKit +///! TODELETE struct SpriteKitView: View { - ///Sprite Kit - //var gs : GameScene = GameScene(size: CGSizeMake(940,740)) - var body: some View { VStack{ - //SpriteView(scene: gs) } } }