annotate GeoQuiz/GuessTheFlagView.swift @ 0:413e2d21333e

first commit
author Dennis C. M. <dennis@denniscm.com>
date Tue, 20 Sep 2022 08:13:26 +0200
parents
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 // GuessTheFlagView.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 20/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 GuessTheFlagView: 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 = GuessTheFlag()
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 body: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
15 ZStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16 LinearGradient(gradient: .main, startPoint: .top, endPoint: .bottom)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
17 .ignoresSafeArea()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
18
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
19 GeometryReader{ geo in
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 VStack(spacing: 20) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
21 GameToolbar(
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
22 userScore: $game.userScore,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
23 userLives: $game.userLives,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
24 gameName: $gameName,
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
25 showingBuyLivesView: $game.showingBuyLivesView
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
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
28 HStack {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
29 VStack(alignment: .leading, spacing: 10) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
30 Text("Question \(game.questionCounter) of \(game.countries.count)")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
31 .font(.title3)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
32
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
33 Text("What is the flag of \(game.countryNameAsked)?")
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
34 .font(.title)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
35 .fontWeight(.semibold)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
36 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
37 .foregroundColor(.white)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
38
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
39 Spacer()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
40 }
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 ForEach(Array(game.userChoices.values), id: \.self) { flagSymbol in
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
45 Button {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
46 game.answered(userChoice: flagSymbol)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
47 } label: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
48 FlagImage(flagSymbol: flagSymbol, cornerRadius: 20)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
49 .shadow(radius: 10)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
50 .frame(height: geo.size.height * 0.15)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
51 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
52 .padding(.top)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
53 }
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 .padding()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
58 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
59 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
60 .navigationBarHidden(true)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
61
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
62 .sheet(isPresented: $game.showingBuyLivesView) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
63 BuyLivesModal()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
64 }
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 .alert(game.alertTitle, isPresented: $game.showingNoLivesAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
67 Button("Buy lives") { game.showingBuyLivesView = true }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
68 Button("Exit", role: .destructive) { gameName = nil }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
69 Button("Cancel", role: .cancel) { }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
70 } message: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
71 Text(game.alertMessage)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
72 }
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 .alert(game.alertTitle, isPresented: $game.showingWrongAnswerAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
75 Button("Continue", role: .cancel) { game.askQuestion() }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
76 } message: {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
77 Text(game.alertMessage)
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
78 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
79
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
80 .alert(game.alertTitle, isPresented: $game.showingEndGameAlert) {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
81 Button("Exit", role: .cancel) { gameName = nil }
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 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
87
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88 struct GuessTheFlagView_Previews: PreviewProvider {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
89 static var previews: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 GuessTheFlagView(gameName: .constant(GameName.guessTheFlag))
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 }