Update(NewDesign): quasi finit

pull/24/head
Louis DUFOUR 10 months ago
parent 7ded496d28
commit 29c9f65c9d

BIN
.DS_Store vendored

Binary file not shown.

@ -1,20 +0,0 @@
//
// AvatarView.swift
// WtaTennis
//
// Created by Johan LACHENAL on 14/05/2024.
//
import SwiftUI
struct AvatarView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
struct AvatarView_Previews: PreviewProvider {
static var previews: some View {
AvatarView()
}
}

@ -9,46 +9,45 @@ import Foundation
import SpriteKit
import DouShouQiModel
class GameScene : SKScene {
let imageBoard:SKSpriteNode = SKSpriteNode(imageNamed: "board")
var pieces: [Owner : [SpriteMoople]] = [ .player1 : [ SpriteMoople(nameImage: "catMeeple", couleur: .red),
SpriteMoople(nameImage: "dogMeeple", couleur: .red),
SpriteMoople(nameImage: "leopardMeeple", couleur: .red),
SpriteMoople(nameImage: "lionMeeple", couleur: .red),
SpriteMoople(nameImage: "ratMeeple", couleur: .red),
SpriteMoople(nameImage: "wolfMeeple", couleur: .red)],
.player2 : [ SpriteMoople(nameImage: "catMeeple", couleur: .blue),
SpriteMoople(nameImage: "dogMeeple", couleur: .blue),
SpriteMoople(nameImage: "leopardMeeple", couleur: .blue),
SpriteMoople(nameImage: "lionMeeple", couleur: .blue),
SpriteMoople(nameImage: "ratMeeple", couleur: .blue),
SpriteMoople(nameImage: "wolfMeeple", couleur: .blue)]]
override init(size: CGSize) {
class GameScene: SKScene {
let imageBoard: SKSpriteNode = SKSpriteNode(imageNamed: "board")
var player1Name: String
var player1Image: UIImage
var player2Name: String
var player2Image: UIImage
var pieces: [Owner: [SpriteMoople]] = [
.player1: [SpriteMoople(nameImage: "catMeeple", couleur: .red),
SpriteMoople(nameImage: "dogMeeple", couleur: .red),
SpriteMoople(nameImage: "leopardMeeple", couleur: .red),
SpriteMoople(nameImage: "lionMeeple", couleur: .red),
SpriteMoople(nameImage: "ratMeeple", couleur: .red),
SpriteMoople(nameImage: "wolfMeeple", couleur: .red)],
.player2: [SpriteMoople(nameImage: "catMeeple", couleur: .blue),
SpriteMoople(nameImage: "dogMeeple", couleur: .blue),
SpriteMoople(nameImage: "leopardMeeple", couleur: .blue),
SpriteMoople(nameImage: "lionMeeple", couleur: .blue),
SpriteMoople(nameImage: "ratMeeple", couleur: .blue),
SpriteMoople(nameImage: "wolfMeeple", couleur: .blue)]
]
init(size: CGSize, player1Name: String, player1Image: UIImage, player2Name: String, player2Image: UIImage) {
self.player1Name = player1Name
self.player1Image = player1Image
self.player2Name = player2Name
self.player2Image = player2Image
super.init(size: size)
// -- -- //
scaleMode = .aspectFit
anchorPoint = CGPoint(x: 0.5, y: 0.5)
self.addChild(imageBoard)
// -- -- //
for c in pieces.flatMap({ _,values in return values })
{
self.addChild(c)
for piece in pieces.flatMap({ $0.value }) {
self.addChild(piece)
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented")
}
}

@ -9,16 +9,53 @@ import SwiftUI
import SpriteKit
struct GameView: View {
var game:GameScene = GameScene(size: CGSize(width: 940, height: 740))
var player1Name: String
var player1Image: UIImage
var player2Name: String
var player2Image: UIImage
var body: some View {
SpriteView(scene: game)
ZStack {
SpriteView(scene: GameScene(size: CGSize(width: 940, height: 740), player1Name: player1Name, player1Image: player1Image, player2Name: player2Name, player2Image: player2Image))
.edgesIgnoringSafeArea(.all)
VStack {
HStack {
VStack {
Image(uiImage: player1Image)
.resizable()
.aspectRatio(contentMode: .fill) // Assure que l'image remplit le cercle
.frame(width: 125, height: 125)
.clipShape(Circle())
.overlay(Circle().stroke(Color.red, lineWidth: 2))
Text(player1Name)
.font(.headline)
.foregroundColor(.white)
}
Spacer()
VStack {
Image(uiImage: player2Image)
.resizable()
.aspectRatio(contentMode: .fill) // Assure que l'image remplit le cercle
.frame(width: 125, height: 125)
.clipShape(Circle())
.overlay(Circle().stroke(Color.blue, lineWidth: 2))
Text(player2Name)
.font(.headline)
.foregroundColor(.white)
}
}
.padding()
Spacer()
}
}
}
}
struct GameView_Previews: PreviewProvider {
static var previews: some View {
GameView()
GameView(player1Name: "Player 1", player1Image: UIImage(named: "profil")!, player2Name: "Player 2", player2Image: UIImage(named: "profil")!)
}
}

@ -1,42 +0,0 @@
//
// InfoDetailView.swift
// WtaTennis
//
// Created by Johan LACHENAL on 14/05/2024.
//
import SwiftUI
struct InfoDetailView: View {
var body: some View {
ZStack {
Color.purple.edgesIgnoringSafeArea(.all)
VStack(alignment: .leading, spacing: 20) {
Text("Iga Swiatek")
.font(.largeTitle)
.fontWeight(.bold)
.foregroundColor(.white)
HStack {
Image(systemName: "flag.fill")
.foregroundColor(.white)
Text("POLAND")
.foregroundColor(.white)
}
InfoTextView(title: "Height", value: "5' 9\"")
InfoTextView(title: "Age", value: "22")
InfoTextView(title: "Plays", value: "Right-Handed")
InfoTextView(title: "Birthplace", value: "Warsaw, Poland")
}
.padding()
}
}
}
struct InfoDetailView_Previews: PreviewProvider {
static var previews: some View {
InfoDetailView()
}
}

@ -1,29 +0,0 @@
//
// PlayerListView.swift
// WtaTennis
//
// Created by Johan LACHENAL on 14/05/2024.
//
import SwiftUI
struct PlayerListView: View {
@ObservedObject var viewModel: PlayerViewModel
var body: some View {
NavigationStack {
List(viewModel.players, id: \.id) { player in
PlayerProfileView(player: player)
.padding(.vertical, 5)
}
.navigationTitle("Top Players")
}
}
}
struct PlayerListView_Previews: PreviewProvider {
static var previews: some View {
PlayerListView(viewModel: PlayerViewModel())
}
}

@ -1,43 +0,0 @@
//
// ItemCollectionPlayer.swift
// WtaTennis
//
// Created by Johan LACHENAL on 14/05/2024.
//
import SwiftUI
struct PlayerProfileView: View {
var body: some View {
HStack(spacing: 15) {
Text("1") // \(player.rank)
.font(.largeTitle)
.fontWeight(.bold)
.foregroundColor(.purple)
Image("Image")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 50, height: 50)
.clipShape(Circle())
Text("Iga Swiatek")
.font(.title2)
.fontWeight(.semibold)
Spacer()
Label(" France ", systemImage: "flag.fill")
.labelStyle(.titleAndIcon)
.foregroundColor(.red)
}
.padding(.horizontal)
}
}
struct PlayerProfileView_Previews: PreviewProvider {
static var previews: some View {
PlayerProfileView()
}
}

@ -1,40 +0,0 @@
//
// RankingView.swift
// WtaTennis
//
// Created by Johan LACHENAL on 14/05/2024.
//
import SwiftUI
struct RankingView: View {
var body : some View {
ZStack()
{
Rectangle()
.fill(Color.purple) // Rectangle violet
.frame(height: 200) // Ajustez la hauteur du rectangle comme nécessaire
VStack(alignment: .leading, spacing: 20) {
Text("RANKING") // TODO : penser à créer un style pour les textes
.font(.title)
.foregroundColor(.white)
Text("1")
.font(.largeTitle)
.fontWeight(.bold)
.foregroundColor(.white)
Text("Singles")
.font(.title2)
.foregroundColor(.white)
}
.padding() // Ajoutez un padding pour éloigner le texte des bords du rectangle
}
}
}
struct RankingView_Previews: PreviewProvider {
static var previews: some View {
RankingView()
}
}

@ -9,47 +9,33 @@ import SwiftUI
import PhotosUI
struct EditImageComponent: View {
@State private var avatarItem: PhotosPickerItem?
@State private var avatarImage: Image?
let color: Color
let profileWidth: CGFloat
let profileHeight: CGFloat
let defaultImage: Image
let imageTextChange: LocalizedStringKey
@Binding var playerImage: UIImage
@State private var selectedImageItem: PhotosPickerItem? = nil
var body: some View {
HStack {
VStack {
HStack {
GeometryReader { geometry in
ZStack {
// Background color
color
// Profile Image
ProfileComponent(color: color, profileWidth: profileWidth, profileHeight: profileHeight, image: avatarImage ?? defaultImage)
}
// Ensure the ZStack takes the size of the GeometryReader
.frame(width: geometry.size.width, height: geometry.size.height)
.clipShape(Circle())
}
.aspectRatio(1, contentMode: .fit)
.frame(width: profileWidth, height: profileHeight) // Optional fixed size
PhotosPicker(selection: $avatarItem, matching: .images) {
Text(imageTextChange)
}
.onChange(of: avatarItem) { newValue in
if let newItem = newValue {
Task {
if let data = try? await newItem.loadTransferable(type: Data.self),
let uiImage = UIImage(data: data) {
avatarImage = Image(uiImage: uiImage)
} else {
print("Failed to load image")
}
}
}
Image(uiImage: playerImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: profileWidth, height: profileHeight)
.clipShape(Circle())
.overlay(Circle().stroke(color, lineWidth: 2))
PhotosPicker(selection: $selectedImageItem, matching: .images) {
Text(imageTextChange)
.foregroundColor(.blue)
.padding(.leading)
}
.onChange(of: selectedImageItem) { newItem in
Task {
if let data = try? await newItem?.loadTransferable(type: Data.self),
let uiImage = UIImage(data: data) {
playerImage = uiImage
}
}
}
@ -64,9 +50,8 @@ struct EditImageComponent_Previews: PreviewProvider {
profileWidth: 100,
profileHeight: 100,
defaultImage: Image("profil"),
imageTextChange: LocalizedStringKey("Changer d'avatar")
imageTextChange: "Changer l'avatar",
playerImage: .constant(UIImage(named: "profil")!)
)
.previewLayout(.sizeThatFits)
.padding()
}
}

@ -6,6 +6,7 @@
//
import SwiftUI
import PhotosUI
struct ProfileEdit: View, KeyboardReadable {
let color: Color
@ -15,19 +16,37 @@ struct ProfileEdit: View, KeyboardReadable {
let imageTextChange: LocalizedStringKey
let playerNameKey: LocalizedStringKey
@Binding var playerName: String
@Binding var playerImage: UIImage
@State private var selectedImageItem: PhotosPickerItem? = nil
@State private var keyboardHeight: CGFloat = 0
@State private var isKeyboardVisible: Bool = false
var body: some View {
VStack(alignment: .leading) {
EditImageComponent(
color: color,
profileWidth: profileWidth,
profileHeight: profileHeight,
defaultImage: defaultImage,
imageTextChange: imageTextChange
).padding(.horizontal)
HStack {
Image(uiImage: playerImage)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: profileWidth, height: profileHeight)
.clipShape(Circle())
.overlay(Circle().stroke(color, lineWidth: 2))
PhotosPicker(selection: $selectedImageItem, matching: .images) {
Text(imageTextChange)
.foregroundColor(.blue)
.padding(.leading)
}
.onChange(of: selectedImageItem) { newItem in
Task {
if let data = try? await newItem?.loadTransferable(type: Data.self),
let uiImage = UIImage(data: data) {
playerImage = uiImage
}
}
}
}
.padding(.horizontal)
EditTextComponent(explanation: playerNameKey, name: $playerName)
.padding(.horizontal)
}
@ -50,8 +69,8 @@ struct ProfileEdit_Previews: PreviewProvider {
defaultImage: Image("profil"),
imageTextChange: "Changer l'avatar",
playerNameKey: "Nom du Joueur 1",
playerName: .constant("Joueur 1")
playerName: .constant("Joueur 1"),
playerImage: .constant(UIImage(named: "profil")!)
)
}
}

@ -6,7 +6,6 @@
//
import SwiftUI
import PhotosUI
struct GameParametersMenuView: View, KeyboardReadable {
@State private var selectedAIOption: AI = .RandomAction
@ -15,6 +14,8 @@ struct GameParametersMenuView: View, KeyboardReadable {
@State private var isKeyboardVisible = false
@State private var playerName1 = NSLocalizedString("Nom du Joueur 1", comment: "")
@State private var playerName2 = NSLocalizedString("Nom du Joueur 2", comment: "")
@State private var playerImage1: UIImage = UIImage(named: "profil")!
@State private var playerImage2: UIImage = UIImage(named: "profil")!
@State private var keyboardHeight: CGFloat = 0
var body: some View {
@ -33,15 +34,15 @@ struct GameParametersMenuView: View, KeyboardReadable {
PickerComponent(title: "Sélectionne une IA :", selectedOption: $selectedAIOption, options: AI.allCases)
}
ProfileEdit(color: Color(.red), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 1", playerNameKey: "Nom du Joueur 1", playerName: $playerName1)
ProfileEdit(color: Color(.red), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 1", playerNameKey: "Nom du Joueur 1", playerName: $playerName1, playerImage: $playerImage1)
if selectedGameType == .PvP {
ProfileEdit(color: Color(.blue), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 2", playerNameKey: "Nom du Joueur 2", playerName: $playerName2)
ProfileEdit(color: Color(.blue), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 2", playerNameKey: "Nom du Joueur 2", playerName: $playerName2, playerImage: $playerImage2)
}
if !isKeyboardVisible {
ButtonComponent(title: "Lancer la partie") {
GameView()
GameView(player1Name: playerName1, player1Image: playerImage1, player2Name: playerName2, player2Image: playerImage2)
}
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
}

@ -1,20 +0,0 @@
/
// Picker.swift
// ArkitDoushiQi
//
// Created by Johan LACHENAL on 21/05/2024.
//
import SwiftUI
struct Picker: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
struct Picker_Previews: PreviewProvider {
static var previews: some View {
Picker()
}
}
Loading…
Cancel
Save