Skip to content

Commit 31f206c

Browse files
authored
Merge pull request #56 from TaskarCenterAtUW/feature-Quest-base
Added CallBacks for quests to save answer.
2 parents bc58703 + 55744f1 commit 31f206c

File tree

16 files changed

+194
-87
lines changed

16 files changed

+194
-87
lines changed

GoInfoGame/GoInfoGame/quests/BusStopLit/BusStopLit.swift

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ import UIKit
1010
import SwiftUI
1111
import osmparser
1212

13-
class BusStopLit: Quest{
14-
func onAnswer(answer: Bool) {
15-
}
13+
class BusStopLit: QuestBase, Quest {
1614
var title: String = "Bus Stop Lit"
1715
var filter: String = """
1816
nodes, ways, relations with
@@ -33,15 +31,12 @@ class BusStopLit: Quest{
3331
var icon: UIImage = #imageLiteral(resourceName: "stop_lit")
3432
var wikiLink: String = ""
3533
var changesetComment: String = ""
36-
var form: AnyView = AnyView(BusStopLitForm())
34+
3735
var relationData: Element? = nil
38-
func onAnswer(answer: WayLitOrIsStepsAnswer) {
39-
40-
}
4136
var displayUnit: DisplayUnit {
4237
DisplayUnit(title: self.title, description: "",parent: self,sheetSize:.SMALL )
4338
}
44-
typealias AnswerClass = Bool
39+
typealias AnswerClass = YesNoAnswer
4540

4641
var _internalExpression: ElementFilterExpression?
4742

@@ -55,6 +50,22 @@ class BusStopLit: Quest{
5550
return _internalExpression
5651
}
5752
}
53+
var form: AnyView {
54+
get{
55+
return AnyView(self.internalForm as! BusStopLitForm)
56+
}
57+
}
58+
59+
override init() {
60+
super.init()
61+
self.internalForm = BusStopLitForm(action: { [self] answer in
62+
self.onAnswer(answer: answer)
63+
})
64+
}
65+
66+
func onAnswer(answer: YesNoAnswer) {
67+
68+
}
5869

5970
func copyWithElement(element: Element) -> any Quest {
6071
let q = BusStopLit()

GoInfoGame/GoInfoGame/quests/BusStopLit/BusStopLitForm.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import Foundation
99
import SwiftUI
1010

1111
struct BusStopLitForm: View, QuestForm {
12-
var action: ((Bool) -> Void)?
13-
14-
typealias AnswerClass = Bool
12+
var action: ((YesNoAnswer) -> Void)?
13+
14+
typealias AnswerClass = YesNoAnswer
1515
var body: some View {
1616
VStack{
1717
QuestionHeader(icon: Image("stop_lit"), title: LocalizedStrings.questBusStopLitTitle.localized, subtitle: "SideWalk")
18-
YesNoView().padding(10)
18+
YesNoView(action: action).padding(10)
1919
.background(
2020
RoundedRectangle(cornerRadius: 10)
2121
.fill(Color.white)

GoInfoGame/GoInfoGame/quests/CrossingMarking/CrossMarking.swift

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,12 @@ import UIKit
1010
import SwiftUI
1111
import osmparser
1212

13-
class CrossMarking :Quest {
14-
func onAnswer(answer: CrossingAnswer) {
15-
16-
}
13+
class CrossMarking: QuestBase, Quest {
1714
var title: String = "Cross Marking"
1815
var filter: String = ""
1916
var icon: UIImage = #imageLiteral(resourceName: "pedestrian")
2017
var wikiLink: String = ""
2118
var changesetComment: String = ""
22-
var form: AnyView = AnyView(CrossMarkingForm())
2319
var relationData: Element? = nil
2420
var displayUnit: DisplayUnit {
2521
DisplayUnit(title: self.title, description: "",parent: self,sheetSize:.MEDIUM )
@@ -38,6 +34,22 @@ class CrossMarking :Quest {
3834
return _internalExpression
3935
}
4036
}
37+
var form: AnyView {
38+
get{
39+
return AnyView(self.internalForm as! CrossMarkingForm)
40+
}
41+
}
42+
43+
override init() {
44+
super.init()
45+
self.internalForm = CrossMarkingForm(action: { [self] answer in
46+
self.onAnswer(answer: answer)
47+
})
48+
}
49+
50+
func onAnswer(answer: CrossingAnswer) {
51+
52+
}
4153

4254
func copyWithElement(element: Element) -> any Quest {
4355
let q = CrossMarking()

GoInfoGame/GoInfoGame/quests/Handrail/HandRail.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@ import Foundation
1010
import osmparser
1111

1212
class HandRail: QuestBase,Quest {
13-
14-
func onAnswer(answer: Bool) {
15-
16-
}
17-
18-
typealias AnswerClass = Bool
13+
typealias AnswerClass = YesNoAnswer
1914

2015
var title: String = "HandRail"
2116

@@ -68,6 +63,10 @@ class HandRail: QuestBase,Quest {
6863
})
6964
}
7065

66+
func onAnswer(answer: YesNoAnswer) {
67+
68+
}
69+
7170
func copyWithElement(element: Element) -> any Quest {
7271
let q = HandRail()
7372
q.relationData = element

GoInfoGame/GoInfoGame/quests/Handrail/HandRailForm.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,13 @@
88
import SwiftUI
99

1010
struct HandRailForm: View, QuestForm {
11-
var action: ((Bool) -> Void)?
12-
13-
14-
typealias AnswerClass = Bool
15-
16-
11+
typealias AnswerClass = YesNoAnswer
12+
var action: ((YesNoAnswer) -> Void)?
1713

1814
var body: some View {
1915
VStack{
2016
QuestionHeader(icon: Image("steps_handrail"), title: "Do these steps have handrail?", subtitle: "")
21-
YesNoView()
17+
YesNoView(action: action)
2218
.background(
2319
RoundedRectangle(cornerRadius: 10)
2420
.fill(Color.white)

GoInfoGame/GoInfoGame/quests/SideWalkValidation/SideWalkValidation.swift

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,41 @@ import Foundation
99
import SwiftUI
1010
import osmparser
1111

12-
class SideWalkValidation :Quest {
13-
func onAnswer(answer: SideWalkValidationAnswer) {
14-
}
12+
class SideWalkValidation: QuestBase, Quest {
1513
typealias AnswerClass = SideWalkValidationAnswer
1614
var title: String = "Sidewalk Validation"
1715
var filter: String = ""
1816
var icon: UIImage = #imageLiteral(resourceName: "sidewalk.pdf")
1917
var wikiLink: String = ""
2018
var changesetComment: String = ""
21-
var form : AnyView = AnyView(SideWalkValidationForm())
2219
var relationData: Element? = nil
2320
var displayUnit: DisplayUnit {
2421
DisplayUnit(title: self.title, description: "",parent: self,sheetSize:.LARGE )
2522
}
23+
var form: AnyView {
24+
get{
25+
return AnyView(self.internalForm as! SideWalkValidationForm)
26+
}
27+
}
28+
29+
override init() {
30+
super.init()
31+
self.internalForm = SideWalkValidationForm(action: { [self] answer in
32+
self.onAnswer(answer: answer)
33+
})
34+
}
35+
36+
func onAnswer(answer: SideWalkValidationAnswer) {
37+
38+
}
2639

2740
func copyWithElement(element: Element) -> any Quest {
2841
let q = SideWalkValidation()
2942
q.relationData = element
3043
return q
3144
}
3245
}
46+
3347
enum SideWalkValidationAnswer {
3448
case left
3549
case right
@@ -49,6 +63,7 @@ enum SideWalkValidationAnswer {
4963
}
5064
}
5165
}
66+
5267
extension SideWalkValidationAnswer {
5368
static func fromString(_ string: String, id: Int? = nil) -> SideWalkValidationAnswer? {
5469
switch string.lowercased() {

GoInfoGame/GoInfoGame/quests/SidewalkSurface/SidewalkSurface.swift

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,41 @@ import Foundation
99
import UIKit
1010
import SwiftUI
1111
import osmparser
12-
class SidewalkSurface :Quest {
12+
13+
class SidewalkSurface: QuestBase, Quest {
1314
typealias AnswerClass = SidewalkSurfaceAnswer
14-
15-
func onAnswer(answer: SidewalkSurfaceAnswer) {
16-
}
1715
var title: String = "Sidewalk Surface"
1816
var filter: String = ""
1917
var icon: UIImage = #imageLiteral(resourceName: "sidewalk_surface.pdf")
2018
var wikiLink: String = ""
2119
var changesetComment: String = ""
22-
var form : AnyView = AnyView(SidewalkSurfaceForm())
2320
var relationData: Element? = nil
2421
var displayUnit: DisplayUnit {
2522
DisplayUnit(title: self.title, description: "",parent: self,sheetSize:.LARGE )
2623
}
24+
var form: AnyView {
25+
get{
26+
return AnyView(self.internalForm as! SidewalkSurfaceForm)
27+
}
28+
}
29+
30+
override init() {
31+
super.init()
32+
self.internalForm = SidewalkSurfaceForm(action: { [self] answer in
33+
self.onAnswer(answer: answer)
34+
})
35+
}
2736

2837
func copyWithElement(element: Element) -> any Quest {
2938
let surface = SidewalkSurface()
3039
surface.relationData = element
3140
return surface
3241
}
42+
43+
func onAnswer(answer: SidewalkSurfaceAnswer) {
44+
45+
46+
}
3347
}
3448

3549
struct SidewalkSurfaceAnswer {

GoInfoGame/GoInfoGame/quests/StairNumber/StairNumber.swift

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ import UIKit
1010
import SwiftUI
1111
import osmparser
1212

13-
class StairNumber :Quest {
14-
func onAnswer(answer: Int) {
15-
}
13+
class StairNumber: QuestBase, Quest {
14+
1615
var title: String = "Stair Number"
1716
var filter: String = ""
1817
var icon: UIImage = #imageLiteral(resourceName: "steps_count")
1918
var wikiLink: String = ""
2019
var changesetComment: String = ""
21-
var form: AnyView = AnyView(StairNumberForm())
20+
var form: AnyView {
21+
get{
22+
return AnyView(self.internalForm as! StairNumberForm)
23+
}
24+
}
2225
var relationData: Element? = nil
2326
var displayUnit: DisplayUnit {
2427
DisplayUnit(title: self.title, description: "",parent: self,sheetSize:.MEDIUM )
@@ -37,6 +40,16 @@ class StairNumber :Quest {
3740
}
3841
}
3942

43+
override init() {
44+
super.init()
45+
self.internalForm = StairNumberForm(action: { [self] answer in
46+
self.onAnswer(answer: answer)
47+
})
48+
}
49+
50+
func onAnswer(answer: Int) {
51+
}
52+
4053
func copyWithElement(element: Element) -> any Quest {
4154
let q = StairNumber()
4255
q.relationData = element

GoInfoGame/GoInfoGame/quests/StepsIncline/StepsIncline.swift

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ import UIKit
1010
import SwiftUI
1111
import osmparser
1212

13-
class StepsIncline: Quest {
14-
func onAnswer(answer: StepsInclineDirection) {
15-
16-
}
13+
class StepsIncline: QuestBase, Quest {
1714

1815
typealias AnswerClass = StepsInclineDirection
1916

@@ -33,8 +30,6 @@ class StepsIncline: Quest {
3330

3431
var changesetComment: String = ""
3532

36-
var form: AnyView = AnyView(StepsInclineForm()) // temporary
37-
3833
var relationData: Element? = nil
3934

4035
var displayUnit: DisplayUnit {
@@ -52,6 +47,22 @@ class StepsIncline: Quest {
5247
return _internalExpression
5348
}
5449
}
50+
var form: AnyView {
51+
get{
52+
return AnyView(self.internalForm as! StepsInclineForm)
53+
}
54+
}
55+
56+
override init() {
57+
super.init()
58+
self.internalForm = StepsInclineForm(action: { [self] answer in
59+
self.onAnswer(answer: answer)
60+
})
61+
}
62+
63+
func onAnswer(answer: StepsInclineDirection) {
64+
65+
}
5566

5667
func copyWithElement(element: Element) -> any Quest {
5768
let q = StepsIncline()

GoInfoGame/GoInfoGame/quests/StepsIncline/StepsInclineForm.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ struct StepsInclineForm: View, QuestForm {
2727
VStack (alignment: .leading){
2828
Text(LocalizedStrings.selectOne.localized).font(.caption).foregroundColor(.gray)
2929
ImageGridItemView(gridCount: 2, isLabelBelow: true, imageData: imageData, isImageRotated: true, isDisplayImageOnly: false, onTap: { (type, tag) in
30-
print("Clicked: \(type), Tag: \(tag)")}, selectedImage:$selectedImage)
30+
print("Clicked: \(type), Tag: \(tag)")
31+
action?(.down)
32+
}, selectedImage:$selectedImage)
3133
Divider()
3234
HStack() {
3335
Spacer()

0 commit comments

Comments
 (0)