Mercurial > public > geoquiz
comparison 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 |
comparison
equal
deleted
inserted
replaced
25:b3df0f5dc750 | 26:425078c01194 |
---|---|
1 // | |
2 // GameInfoModel+Protocol.swift | |
3 // GeoQuiz | |
4 // | |
5 // Created by Dennis Concepción Martín on 22/10/22. | |
6 // | |
7 | |
8 import Foundation | |
9 import SwiftUI | |
10 | |
11 protocol GameInfo { | |
12 var type: GameType { get } | |
13 var level: String { get } | |
14 var name: String { get } | |
15 var isPremium: Bool { get } | |
16 var symbol: String { get } | |
17 var gradient: Gradient { get } | |
18 var numberOfQuestions: Int { get } | |
19 } | |
20 | |
21 class GameInfoModel { | |
22 static func getInfo(for gameType: GameType) -> GameInfo { | |
23 switch gameType { | |
24 case .guessTheFlag: | |
25 return GuessTheFlagInfo() | |
26 case .guessTheCapital: | |
27 return GuessTheCapitalInfo() | |
28 case .guessTheCountry: | |
29 return GuessTheCountryInfo() | |
30 case .guessThePopulation: | |
31 return GuessThePopulationInfo() | |
32 } | |
33 } | |
34 | |
35 private struct GuessTheFlagInfo: GameInfo { | |
36 let type: GameType = .guessTheFlag | |
37 let level = "Level 1" | |
38 let name = "Guess the flag" | |
39 let isPremium = false | |
40 let symbol = "flag.fill" | |
41 let gradient: Gradient = .main | |
42 | |
43 var numberOfQuestions: Int { | |
44 let data: CountryModel = Bundle.main.decode("countries.json") | |
45 return data.countries.count | |
46 } | |
47 } | |
48 | |
49 private struct GuessTheCapitalInfo: GameInfo { | |
50 let type: GameType = .guessTheFlag | |
51 let level = "Level 2" | |
52 let name = "Guess the capital" | |
53 let isPremium = false | |
54 let symbol = "building.2.fill" | |
55 let gradient: Gradient = .secondary | |
56 | |
57 var numberOfQuestions: Int { | |
58 let data: CountryModel = Bundle.main.decode("countries.json") | |
59 return data.countries.count | |
60 } | |
61 } | |
62 | |
63 private struct GuessTheCountryInfo: GameInfo { | |
64 let type: GameType = .guessTheFlag | |
65 let level = "Level 3" | |
66 let name = "Guess the country" | |
67 let isPremium = false | |
68 let symbol = "globe.americas.fill" | |
69 let gradient: Gradient = .tertiary | |
70 | |
71 var numberOfQuestions: Int { | |
72 let data: CityModel = Bundle.main.decode("cities.json") | |
73 return data.cities.count | |
74 } | |
75 } | |
76 | |
77 private struct GuessThePopulationInfo: GameInfo { | |
78 let type: GameType = .guessTheFlag | |
79 let level = "Level 4" | |
80 let name = "Guess the population" | |
81 let isPremium = false | |
82 let symbol = "person.fill" | |
83 let gradient: Gradient = .quaternary | |
84 | |
85 var numberOfQuestions: Int { | |
86 let data: CityModel = Bundle.main.decode("cities.json") | |
87 return data.cities.count | |
88 } | |
89 } | |
90 } |