Mercurial > public > geoquiz
comparison GeoQuiz/Components/UserProgressHelper.swift @ 17:8dac58bb4569
fix build bug
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 20 Oct 2022 18:07:51 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:1011e56b7832 | 17:8dac58bb4569 |
---|---|
1 // | |
2 // UserProgressHelper.swift | |
3 // GeoQuiz | |
4 // | |
5 // Created by Dennis Concepción Martín on 20/10/22. | |
6 // | |
7 | |
8 import SwiftUI | |
9 | |
10 struct ViewTest: View { | |
11 var body: some View { | |
12 GeometryReader { geo in | |
13 ZStack { | |
14 Capsule() | |
15 .frame(height: 6) | |
16 } | |
17 } | |
18 } | |
19 } | |
20 | |
21 struct UserProgress: View { | |
22 let name: String | |
23 let gradient: Gradient | |
24 let score: Int | |
25 let maxScore: Int | |
26 let pctScore: Double | |
27 | |
28 var body: some View { | |
29 VStack { | |
30 Spacer() | |
31 HStack { | |
32 Text(name) | |
33 .font(.headline) | |
34 | |
35 Spacer() | |
36 | |
37 Text("\(score) of \(maxScore)") | |
38 .font(.callout) | |
39 .foregroundColor(.secondary) | |
40 } | |
41 | |
42 GeometryReader { geo in | |
43 ZStack(alignment: .leading) { | |
44 Capsule() | |
45 .foregroundColor(.customBackground) | |
46 .frame(height: 6) | |
47 | |
48 Capsule() | |
49 .fill( | |
50 LinearGradient( | |
51 gradient: gradient, | |
52 startPoint: .trailing, endPoint: .leading | |
53 ) | |
54 ) | |
55 .frame(width: geo.size.width * pctScore, height: 6) | |
56 } | |
57 .frame(height: geo.size.height) | |
58 } | |
59 } | |
60 } | |
61 | |
62 init(playedGames: FetchedResults<PlayedGame>, gameType: GameType) { | |
63 switch(gameType) { | |
64 case . guessTheFlag: | |
65 self.name = GuessTheFlagInfo.name | |
66 self.gradient = GuessTheFlagInfo.gradient | |
67 self.maxScore = GuessTheFlagInfo.numberOfQuestions | |
68 case .guessTheCapital: | |
69 self.name = GuessTheCapitalInfo.name | |
70 self.gradient = GuessTheCapitalInfo.gradient | |
71 self.maxScore = GuessTheCapitalInfo.numberOfQuestions | |
72 case .guessTheCountry: | |
73 self.name = GuessTheCountryInfo.name | |
74 self.gradient = GuessTheCountryInfo.gradient | |
75 self.maxScore = GuessTheCountryInfo.numberOfQuestions | |
76 case .guessThePopulation: | |
77 self.name = GuessThePopulationInfo.name | |
78 self.gradient = GuessThePopulationInfo.gradient | |
79 self.maxScore = GuessThePopulationInfo.numberOfQuestions | |
80 } | |
81 | |
82 let games = playedGames.filter { $0.type == gameType } | |
83 self.score = Int(games.max { $0.score < $1.score }?.score ?? 0) | |
84 self.pctScore = Double(score) / Double(maxScore) | |
85 } | |
86 } |