aboutsummaryrefslogtreecommitdiff
path: root/Map/Presentation/Complex Components/MapRender/MapRenderView.swift
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2023-05-07 15:22:54 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2023-05-07 15:22:54 +0200
commitfdb4633d3e9158e457d57e820df6e1efb4df39c2 (patch)
tree176cad99cb9befc0a65a7af02561019e811814de /Map/Presentation/Complex Components/MapRender/MapRenderView.swift
parent75a0e4509a70055851b085f3f7293ae1cf48164c (diff)
Update to support notes + new style2.0.0
Diffstat (limited to 'Map/Presentation/Complex Components/MapRender/MapRenderView.swift')
-rw-r--r--Map/Presentation/Complex Components/MapRender/MapRenderView.swift63
1 files changed, 63 insertions, 0 deletions
diff --git a/Map/Presentation/Complex Components/MapRender/MapRenderView.swift b/Map/Presentation/Complex Components/MapRender/MapRenderView.swift
new file mode 100644
index 0000000..b12dabc
--- /dev/null
+++ b/Map/Presentation/Complex Components/MapRender/MapRenderView.swift
@@ -0,0 +1,63 @@
+import Combine
+import CoreData
+import CoreGraphics
+import SwiftUI
+
+struct MapRenderView: View {
+
+ @Binding var content: String
+ @Binding var evolution: StageType
+
+ var stage: Stage {
+ Stage.stages(evolution)
+ }
+
+ @State var parsedMap: ParsedMap = ParsedMap.empty
+
+ let mapSize = CGSize(width: 1300.0, height: 1000.0)
+
+ let lineWidth = CGFloat(0.5)
+ let vertexSize = CGSize(width: 25.0, height: 25.0)
+ let padding = CGFloat(30.0)
+
+ var body: some View {
+ ZStack(alignment: .topLeading) {
+
+ Path { path in
+ path.addRect(
+ CGRect(
+ x: -padding, y: -padding, width: mapSize.width + padding * 2,
+ height: mapSize.height + padding * 4))
+ }.fill(.white)
+
+ MapStages(mapSize: mapSize, lineWidth: lineWidth, stages: parsedMap.stages)
+ MapAxes(
+ mapSize: mapSize, lineWidth: lineWidth, evolution: stage, stages: parsedMap.stages)
+ MapEdges(
+ mapSize: mapSize, lineWidth: lineWidth, vertexSize: vertexSize, edges: parsedMap.edges)
+ MapBlockers(mapSize: mapSize, vertexSize: vertexSize, blockers: parsedMap.blockers)
+ MapVertices(mapSize: mapSize, vertexSize: vertexSize, vertices: parsedMap.vertices)
+ MapOpportunities(
+ mapSize: mapSize, lineWidth: lineWidth, vertexSize: vertexSize,
+ opportunities: parsedMap.opportunities)
+ MapNotes(
+ mapSize: mapSize, lineWidth: lineWidth, notes: parsedMap.notes)
+ }.frame(
+ width: mapSize.width,
+ height: mapSize.height + 2 * padding, alignment: .topLeading
+ ).onAppear {
+ self.parsedMap = Map.parse(content: content)
+ }.padding(padding).onChange(of: content) { newState in
+ self.parsedMap = Map.parse(content: newState)
+ }
+ }
+}
+
+struct MapRenderView_Previews: PreviewProvider {
+ static var previews: some View {
+ MapRenderView(
+ content: Binding.constant(""), evolution: Binding.constant(StageType.general)
+ ).environment(
+ \.managedObjectContext, PersistenceController.preview.container.viewContext)
+ }
+}