0
|
1 //
|
|
2 // GuessTheFlagView.swift
|
|
3 // GeoQuiz
|
|
4 //
|
|
5 // Created by Dennis Concepción Martín on 20/9/22.
|
|
6 //
|
|
7
|
|
8 import SwiftUI
|
|
9
|
|
10 struct GuessTheFlagView: View {
|
|
11 @Binding var gameName: GameName?
|
|
12 @StateObject var game = GuessTheFlag()
|
|
13
|
|
14 var body: some View {
|
|
15 ZStack {
|
|
16 LinearGradient(gradient: .main, startPoint: .top, endPoint: .bottom)
|
|
17 .ignoresSafeArea()
|
|
18
|
|
19 GeometryReader{ geo in
|
|
20 VStack(spacing: 20) {
|
|
21 GameToolbar(
|
|
22 userScore: $game.userScore,
|
|
23 userLives: $game.userLives,
|
|
24 gameName: $gameName,
|
|
25 showingBuyLivesView: $game.showingBuyLivesView
|
|
26 )
|
|
27
|
|
28 HStack {
|
|
29 VStack(alignment: .leading, spacing: 10) {
|
|
30 Text("Question \(game.questionCounter) of \(game.countries.count)")
|
|
31 .font(.title3)
|
|
32
|
|
33 Text("What is the flag of \(game.countryNameAsked)?")
|
|
34 .font(.title)
|
|
35 .fontWeight(.semibold)
|
|
36 }
|
|
37 .foregroundColor(.white)
|
|
38
|
|
39 Spacer()
|
|
40 }
|
|
41
|
|
42 Spacer()
|
|
43
|
|
44 ForEach(Array(game.userChoices.values), id: \.self) { flagSymbol in
|
|
45 Button {
|
|
46 game.answered(userChoice: flagSymbol)
|
|
47 } label: {
|
|
48 FlagImage(flagSymbol: flagSymbol, cornerRadius: 20)
|
|
49 .shadow(radius: 10)
|
|
50 .frame(height: geo.size.height * 0.15)
|
|
51 }
|
|
52 .padding(.top)
|
|
53 }
|
|
54
|
|
55 Spacer()
|
|
56 }
|
|
57 .padding()
|
|
58 }
|
|
59 }
|
|
60 .navigationBarHidden(true)
|
|
61
|
|
62 .sheet(isPresented: $game.showingBuyLivesView) {
|
|
63 BuyLivesModal()
|
|
64 }
|
|
65
|
|
66 .alert(game.alertTitle, isPresented: $game.showingNoLivesAlert) {
|
|
67 Button("Buy lives") { game.showingBuyLivesView = true }
|
|
68 Button("Exit", role: .destructive) { gameName = nil }
|
|
69 Button("Cancel", role: .cancel) { }
|
|
70 } message: {
|
|
71 Text(game.alertMessage)
|
|
72 }
|
|
73
|
|
74 .alert(game.alertTitle, isPresented: $game.showingWrongAnswerAlert) {
|
|
75 Button("Continue", role: .cancel) { game.askQuestion() }
|
|
76 } message: {
|
|
77 Text(game.alertMessage)
|
|
78 }
|
|
79
|
|
80 .alert(game.alertTitle, isPresented: $game.showingEndGameAlert) {
|
|
81 Button("Exit", role: .cancel) { gameName = nil }
|
|
82 } message: {
|
|
83 Text(game.alertMessage)
|
|
84 }
|
|
85 }
|
|
86 }
|
|
87
|
|
88 struct GuessTheFlagView_Previews: PreviewProvider {
|
|
89 static var previews: some View {
|
|
90 GuessTheFlagView(gameName: .constant(GameName.guessTheFlag))
|
|
91 }
|
|
92 }
|