annotate GeoQuiz/GuessTheCapitalView.swift @ 1:259a15f485c5

fix bug with NavigationLink
author Dennis C. M. <dennis@denniscm.com>
date Tue, 20 Sep 2022 11:53:54 +0200
parents 413e2d21333e
children 4dbe0cd9dadc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
1 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
2 // GuessTheCapitalView.swift
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
3 // GeoQuiz
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
4 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 14/9/22.
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
6 //
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
7
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
8 import SwiftUI
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
9
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
10 struct GuessTheCapitalView: View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
11 @Binding var gameName: GameName?
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
12 @StateObject var game = GuessTheCapital()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
13
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
14 var flagSymbol: String {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15 if let countryAsked = game.countries[game.countryNameAsked] {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 return countryAsked.flagSymbol
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17 } else {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18 fatalError("Couldn't find \(game.countryNameAsked) in countries")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
19 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 var body: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23 ZStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 LinearGradient(gradient: .secondary, startPoint: .top, endPoint: .bottom)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 .ignoresSafeArea()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
26
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
27 GeometryReader { geo in
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28 VStack(spacing: 20) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 GameToolbar(
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30 userScore: $game.userScore,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
31 userLives: $game.userLives,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32 gameName: $gameName,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33 showingBuyLivesView: $game.showingBuyLivesView
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34 )
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
38 FlagImage(flagSymbol: flagSymbol, cornerRadius: 20)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
39 .shadow(radius: 10)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
40 .frame(height: geo.size.height * 0.15)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
41
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
42 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
43
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
44 HStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
45 VStack(alignment: .leading, spacing: 10) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
46 Text("Question \(game.questionCounter) of \(game.countries.count)")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
47 .font(.title3)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
48
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
49 Text("What is the capital of \(game.countryNameAsked)?")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50 .font(.title)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
51 .fontWeight(.semibold)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
52 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
53 .foregroundColor(.white)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
54
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
55 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
56 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
57
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
58 VStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
59 ForEach(Array(game.userChoices.values), id: \.self) { country in
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
60 Button {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
61 game.answered(userChoice: country.capitalName)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62 } label: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
63 AnswerButton(optionName: country.capitalName, color: .secondary)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
64 .frame(height: geo.size.height * 0.08)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
65 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
66 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69 .padding()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 .navigationBarHidden(true)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
73
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
74 .sheet(isPresented: $game.showingBuyLivesView) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
75 BuyLivesModal()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
76 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
77
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
78 .alert(game.alertTitle, isPresented: $game.showingNoLivesAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79 Button("Buy lives") { game.showingBuyLivesView = true }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80 Button("Exit", role: .destructive) { gameName = nil }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
81 Button("Cancel", role: .cancel) { }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
82 } message: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
83 Text(game.alertMessage)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
84 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
85
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
86 .alert(game.alertTitle, isPresented: $game.showingWrongAnswerAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
87 Button("Continue", role: .cancel) { game.askQuestion() }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88 } message: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 Text(game.alertMessage)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
91
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92 .alert(game.alertTitle, isPresented: $game.showingEndGameAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
93 Button("Exit", role: .cancel) { gameName = nil }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
94 } message: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
95 Text(game.alertMessage)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
96 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
97 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
98 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
99
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
100 struct GuessCapitalView_Previews: PreviewProvider {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
101 static var previews: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
102 NavigationView {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
103 GuessTheCapitalView(gameName: .constant(GameName.guessTheCapital))
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
104 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
105 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
106 }