19
|
1 //
|
26
|
2 // GameInfoModel+Protocol.swift
|
19
|
3 // GeoQuiz
|
|
4 //
|
|
5 // Created by Dennis Concepción Martín on 22/10/22.
|
|
6 //
|
|
7
|
|
8 import Foundation
|
|
9 import SwiftUI
|
|
10
|
26
|
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 {
|
19
|
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 {
|
26
|
44 let data: CountryModel = Bundle.main.decode("countries.json")
|
19
|
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 {
|
26
|
58 let data: CountryModel = Bundle.main.decode("countries.json")
|
19
|
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 {
|
26
|
72 let data: CityModel = Bundle.main.decode("cities.json")
|
19
|
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 {
|
26
|
86 let data: CityModel = Bundle.main.decode("cities.json")
|
19
|
87 return data.cities.count
|
|
88 }
|
|
89 }
|
|
90 }
|