diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-07-07 13:51:43 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-07-07 13:51:43 +0200 |
| commit | 3bacbf6ac85330d35493953d7296e5ba420b7750 (patch) | |
| tree | be3e09b66d2567d5cc78798c47a45a039b534b02 /Map/Presentation/Base Components/MapRender/MapIntertias.swift | |
| parent | a1a485f16e0f1720f2dcdf7ab03d52c29fe9e252 (diff) | |
Use inertia instead of blockers
Diffstat (limited to 'Map/Presentation/Base Components/MapRender/MapIntertias.swift')
| -rw-r--r-- | Map/Presentation/Base Components/MapRender/MapIntertias.swift | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/Map/Presentation/Base Components/MapRender/MapIntertias.swift b/Map/Presentation/Base Components/MapRender/MapIntertias.swift new file mode 100644 index 0000000..91ec6f9 --- /dev/null +++ b/Map/Presentation/Base Components/MapRender/MapIntertias.swift @@ -0,0 +1,55 @@ +// Copyright (C) 2024 Rubén Beltrán del Río + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program. If not, see https://map.tranquil.systems. +import SwiftUI + +struct MapIntertias: View { + + let mapSize: CGSize + let vertexSize: CGSize + let inertias: [Inertia] + + let cornerSize = CGSize(width: 2.0, height: 2.0) + + var body: some View { + ForEach(inertias, id: \.id) { vertex in + Path { path in + path.addRoundedRect( + in: CGRect( + origin: CGPoint( + x: w(vertex.position.x) + 3 * vertexSize.width, + y: h(vertex.position.y) - vertexSize.height * 2 / 3), + size: CGSize(width: vertexSize.width / 2, height: vertexSize.height * 2) + ), cornerSize: cornerSize) + }.fill(Color.Theme.Map.inertia) + } + } + + func h(_ dimension: CGFloat) -> CGFloat { + max(0.0, min(mapSize.height, dimension * mapSize.height / 100.0)) + } + + func w(_ dimension: CGFloat) -> CGFloat { + max(0.0, min(mapSize.width, dimension * mapSize.width / 100.0)) + } +} + +#Preview { + MapIntertias( + mapSize: CGSize(width: 400.0, height: 400.0), vertexSize: CGSize(width: 25.0, height: 25.0), + inertias: [ + Inertia(id: 0, position: CGPoint(x: 50.0, y: 50.0)), + Inertia(id: 1, position: CGPoint(x: 10.0, y: 20.0)), + ]) +} |