annotate GeoQuiz/ContentView.swift @ 15:f1967f8cc67b

first iteration of core data
author Dennis C. M. <dennis@denniscm.com>
date Wed, 19 Oct 2022 10:04:17 +0200
parents 136928bae534
children 1011e56b7832
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 // ContentView.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 5/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 ContentView: View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
11 @State private var path: [GameType] = []
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
12
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
13 @State private var showingBuyPremiumModalView = false
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
14 @State private var showingSettingsModalView = false
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
15 @State private var showingProfileModalView = false
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
16
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
17 @StateObject var storeKitRC = StoreKitRC()
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
18 @StateObject var user = User()
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
19
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
20 var body: some View {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
21 NavigationStack(path: $path) {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
22 ScrollView(showsIndicators: false) {
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
23
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
24 NavigationLink(value: GameType.guessTheFlag) { EmptyView() }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
25 NavigationLink(value: GameType.guessTheCapital) { EmptyView() }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
26 NavigationLink(value: GameType.guessTheCountry) { EmptyView() }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
27 NavigationLink(value: GameType.guessThePopulation) { EmptyView() }
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
28
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
29 VStack(alignment: .leading, spacing: 30) {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
30 Text("Select a game 🎮")
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
31 .font(.largeTitle.bold())
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
32 .padding(.bottom)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
33
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
34 Button {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
35 path.append(.guessTheFlag)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
36 } label: {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
37 GameButton(
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
38 gradient: .main,
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
39 level: "Level 1",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
40 symbol: "flag.fill",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
41 name: "Guess the flag"
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
42 )
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
43 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
44
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
45 Button {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
46 if storeKitRC.isActive {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
47 path.append(.guessTheCapital)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
48 } else {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
49 showingBuyPremiumModalView = true
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
50 }
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
51 } label: {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
52 GameButton(
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
53 gradient: .secondary,
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
54 level: "Level 2",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
55 symbol: storeKitRC.isActive ? "building.2.fill": "lock.fill",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
56 name: "Guess the capital"
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
57 )
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
58 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
59
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
60 Button {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
61 if storeKitRC.isActive {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
62 path.append(.guessTheCountry)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
63 } else {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
64 showingBuyPremiumModalView = true
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
65 }
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
66 } label: {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
67 GameButton(
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
68 gradient: .tertiary,
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
69 level: "Level 3",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
70 symbol: storeKitRC.isActive ? "globe.americas.fill": "lock.fill",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
71 name: "Guess the country"
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
72 )
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
73 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
74
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
75 Button {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
76 if storeKitRC.isActive {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
77 path.append(.guessThePopulation)
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
78 } else {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
79 showingBuyPremiumModalView = true
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
80 }
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
81 } label: {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
82 GameButton(
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
83 gradient: .quaternary,
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
84 level: "Level 4",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
85 symbol: storeKitRC.isActive ? "person.fill": "lock.fill",
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
86 name: "Guess the population"
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
87 )
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
88 }
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
89
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
90 }
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
91 .padding()
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
92 }
10
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
93 .navigationTitle("GeoQuiz")
a793f33f05fb refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents: 8
diff changeset
94 .navigationBarTitleDisplayMode(.inline)
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
95
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
96 .navigationDestination(for: GameType.self) { gameMode in
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
97 switch gameMode {
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
98 case .guessTheFlag:
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
99 GuessTheFlagView()
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
100 case .guessTheCapital:
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
101 GuessTheFlagView()
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
102 case .guessTheCountry:
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
103 GuessTheCountryView()
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
104 case .guessThePopulation:
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
105 GuessThePopulationView()
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
106 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
107 }
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
108
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
109 .toolbar {
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
110 ToolbarItem(placement: .navigationBarLeading) {
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
111 Button {
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
112 showingSettingsModalView = true
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
113 } label: {
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
114 Label("Settings", systemImage: "gear")
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
115 }
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
116 }
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
117
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
118 ToolbarItemGroup {
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
119 if !storeKitRC.isActive {
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
120 Button {
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
121 showingBuyPremiumModalView = true
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
122 } label: {
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
123 Label("Buy premium", systemImage: "star")
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
124 }
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
125 }
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
126
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
127 Button {
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
128 showingProfileModalView = true
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
129 } label: {
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
130 Label("Profile", systemImage: "person")
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
131 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
132 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
133 }
7
d945e52b0704 implement dynamic map
Dennis C. M. <dennis@denniscm.com>
parents: 6
diff changeset
134 .sheet(isPresented: $showingBuyPremiumModalView) {
13
bdfff35dd43c implement RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 11
diff changeset
135 BuyPremiumModalView(storeKitRC: storeKitRC)
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
136 }
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
137
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
138 .sheet(isPresented: $showingSettingsModalView) {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
139 SettingsModalView(user: user)
5
f31a61462e7a add sound effects
Dennis C. M. <dennis@denniscm.com>
parents: 4
diff changeset
140 }
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
141
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
142 .sheet(isPresented: $showingProfileModalView) {
14
136928bae534 add user profile
Dennis C. M. <dennis@denniscm.com>
parents: 13
diff changeset
143 ProfileModalView(user: user, storeKitRC: storeKitRC)
11
039b26a99a48 implementing RevenueCat
Dennis C. M. <dennis@denniscm.com>
parents: 10
diff changeset
144 }
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
145 }
6
1946bbfde4af reformat data structures
Dennis C. M. <dennis@denniscm.com>
parents: 5
diff changeset
146 .navigationViewStyle(StackNavigationViewStyle())
0
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
147 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
148 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
149
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
150 struct ContentView_Previews: PreviewProvider {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
151 static var previews: some View {
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
152 ContentView()
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
153 }
413e2d21333e first commit
Dennis C. M. <dennis@denniscm.com>
parents:
diff changeset
154 }