Mercurial > public > geoquiz
view GeoQuiz/Controllers/CountryGameController.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 |
line wrap: on
line source
// // CountryGameController.swift // GeoQuiz // // Created by Dennis Concepción Martín on 20/9/22. // import Foundation import AVFAudio @MainActor class CountryGameController: Game, ObservableObject { // Define generic type typealias T = CountryModel.Country // Game var data: [String: T] var dataAsked = [String: T]() // User @Published var userChoices = [String: T]() @Published var userScore = 0 @Published var userLives = 3 @Published var correctAnswer = (key: "", value: T(flag: "", currency: "", population: Int(), capital: "")) @Published var correctAnswers = [String: T]() @Published var wrongAnswers = [String: T]() // Alerts @Published var alertTitle = String() @Published var alertMessage = String() @Published var showingEndGameAlert = false @Published var showingWrongAnswerAlert = false @Published var showingExitGameAlert = false // Animations @Published var scoreScaleAmount = 1.0 @Published var livesScaleAmount = 1.0 // Sound effects @Published var player: AVAudioPlayer? init() { let data: CountryModel = Bundle.main.decode("countries.json") let shuffledCountries = data.countries.shuffled().prefix(100) var countries = [String: T]() for shuffledCountry in shuffledCountries { countries[shuffledCountry.key] = shuffledCountry.value } self.data = countries let user = UserController() userLives = user.data.numberOfLives if let userData = UserDefaults.standard.data(forKey: "UserData") { if let decodedUserData = try? JSONDecoder().decode(UserDataModel.self, from: userData) { userLives = decodedUserData.numberOfLives } } ask() } }