Mercurial > public > geoquiz
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GeoQuiz/Models/GameInfoModel+Protocol.swift Wed Nov 09 10:30:01 2022 +0100 @@ -0,0 +1,90 @@ +// +// 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 + } + } +}