Mercurial > public > geoquiz
view GeoQuiz/Models/GameInfoModel+Protocol.swift @ 26:425078c01194
refactor code
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Wed, 09 Nov 2022 10:30:01 +0100 |
parents | GeoQuiz/Logic/GameInfoController.swift@f140bb277c96 |
children |
line wrap: on
line source
// // GameInfoModel+Protocol.swift // GeoQuiz // // Created by Dennis Concepción Martín on 22/10/22. // import Foundation import SwiftUI protocol GameInfo { var type: GameType { get } var level: String { get } var name: String { get } var isPremium: Bool { get } var symbol: String { get } var gradient: Gradient { get } var numberOfQuestions: Int { get } } class GameInfoModel { static func getInfo(for gameType: GameType) -> GameInfo { switch gameType { case .guessTheFlag: return GuessTheFlagInfo() case .guessTheCapital: return GuessTheCapitalInfo() case .guessTheCountry: return GuessTheCountryInfo() case .guessThePopulation: return GuessThePopulationInfo() } } private struct GuessTheFlagInfo: GameInfo { let type: GameType = .guessTheFlag let level = "Level 1" let name = "Guess the flag" let isPremium = false let symbol = "flag.fill" let gradient: Gradient = .main var numberOfQuestions: Int { let data: CountryModel = Bundle.main.decode("countries.json") return data.countries.count } } private struct GuessTheCapitalInfo: GameInfo { let type: GameType = .guessTheFlag let level = "Level 2" let name = "Guess the capital" let isPremium = false let symbol = "building.2.fill" let gradient: Gradient = .secondary var numberOfQuestions: Int { let data: CountryModel = Bundle.main.decode("countries.json") return data.countries.count } } private struct GuessTheCountryInfo: GameInfo { let type: GameType = .guessTheFlag let level = "Level 3" let name = "Guess the country" let isPremium = false let symbol = "globe.americas.fill" let gradient: Gradient = .tertiary var numberOfQuestions: Int { let data: CityModel = Bundle.main.decode("cities.json") return data.cities.count } } private struct GuessThePopulationInfo: GameInfo { let type: GameType = .guessTheFlag let level = "Level 4" let name = "Guess the population" let isPremium = false let symbol = "person.fill" let gradient: Gradient = .quaternary var numberOfQuestions: Int { let data: CityModel = Bundle.main.decode("cities.json") return data.cities.count } } }