Mercurial > public > geoquiz
annotate GeoQuiz/Controllers/CityGameController.swift @ 34:6ec51a4ca897
fix crash when asking new questions
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Sat, 12 Nov 2022 14:23:05 +0100 |
parents | 6d574bd1644f |
children |
rev | line source |
---|---|
0 | 1 // |
19 | 2 // CityGameController.swift |
0 | 3 // GeoQuiz |
4 // | |
6 | 5 // Created by Dennis Concepción Martín on 29/9/22. |
0 | 6 // |
7 | |
8 import Foundation | |
5 | 9 import AVFAudio |
0 | 10 |
33 | 11 @MainActor class CityGameController: Game, ObservableObject { |
6 | 12 |
33 | 13 // Define generic type |
19 | 14 typealias T = CityModel.City |
6 | 15 |
33 | 16 // Game |
6 | 17 var data: [String: T] |
18 var dataAsked = [String: T]() | |
0 | 19 |
6 | 20 @Published var userChoices = [String: T]() |
0 | 21 @Published var userScore = 0 |
22 @Published var userLives = 3 | |
33 | 23 |
34
6ec51a4ca897
fix crash when asking new questions
Dennis C. M. <dennis@denniscm.com>
parents:
33
diff
changeset
|
24 @Published var correctAnswer = (key: "", value: T(country: "", lat: Double(), lon: Double())) |
6 | 25 @Published var correctAnswers = [String: T]() |
26 @Published var wrongAnswers = [String: T]() | |
3 | 27 |
28 // Alerts | |
29 @Published var alertTitle = String() | |
30 @Published var alertMessage = String() | |
33 | 31 |
3 | 32 @Published var showingEndGameAlert = false |
0 | 33 @Published var showingWrongAnswerAlert = false |
4 | 34 @Published var showingExitGameAlert = false |
0 | 35 |
3 | 36 // Animations |
37 @Published var scoreScaleAmount = 1.0 | |
38 @Published var livesScaleAmount = 1.0 | |
39 | |
5 | 40 // Sound effects |
41 @Published var player: AVAudioPlayer? | |
42 | |
0 | 43 init() { |
26 | 44 let data: CityModel = Bundle.main.decode("cities.json") |
33 | 45 let shuffledCities = data.cities.shuffled() |
30 | 46 var cities = [String: T]() |
33 | 47 |
34
6ec51a4ca897
fix crash when asking new questions
Dennis C. M. <dennis@denniscm.com>
parents:
33
diff
changeset
|
48 for _ in 1...100 { |
33 | 49 let countryNames = cities.map { $0.value.country } |
50 let city = shuffledCities.first(where: { | |
51 !countryNames.contains($0.value.country) | |
52 })! | |
53 | |
54 cities[city.key] = city.value | |
30 | 55 } |
56 | |
57 self.data = cities | |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
58 |
19 | 59 let user = UserController() |
14 | 60 userLives = user.data.numberOfLives |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
61 |
14 | 62 if let userData = UserDefaults.standard.data(forKey: "UserData") { |
19 | 63 if let decodedUserData = try? JSONDecoder().decode(UserDataModel.self, from: userData) { |
14 | 64 userLives = decodedUserData.numberOfLives |
10
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
65 } |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
66 } |
a793f33f05fb
refactor code and fix layout
Dennis C. M. <dennis@denniscm.com>
parents:
9
diff
changeset
|
67 |
33 | 68 ask() |
0 | 69 } |
70 } | |
7 | 71 |
30 | 72 |