diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-05-07 15:22:54 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-05-07 15:22:54 +0200 |
| commit | fdb4633d3e9158e457d57e820df6e1efb4df39c2 (patch) | |
| tree | 176cad99cb9befc0a65a7af02561019e811814de /Map/Presentation/Complex Components/MapRender/MapRenderView.swift | |
| parent | 75a0e4509a70055851b085f3f7293ae1cf48164c (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.swift | 63 |
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) + } +} |